두 갈래 나무 비귀속 역행 방법 소결

7164 단어 두 갈래 나무
두 갈래 나무의 범람은 면접에서 자주 고찰한 것이다. 사실 앞뒤의 세 가지 순서의 범람은 모두 대동소이하다. 자신이 두 창고의 필획을 모의하는 것은 코드를 쓰기 어렵지 않을 것이라고 나는 믿는다.현재 나열은 다음과 같다. 모두 자신이 쓴 것이leetcode를 통과한 것이다.
 1 class Solution {

 2 public:

 3     vector<int> preorderTraversal(TreeNode *root) {

 4         vector<int> out;

 5         stack<TreeNode*> s;

 6         s.push(root);

 7         while(!s.empty() && root){

 8             TreeNode *node = s.top();

 9             out.push_back(node->val);

10             s.pop();

11             if(node->right) s.push(node->right);

12             if(node->left)  s.push(node->left);

13         }

14         return out;

15         

16     

17     }

18     vector<int> inorderTraversal(TreeNode *root) {

19         stack<TreeNode *> s;

20         vector<int> out;

21         TreeNode *node = root;

22         bool done = false;

23         while(!done){

24             if(node){

25                 s.push(node);

26                 node = node->left;

27             }else {

28                 if(s.empty()) done = true;

29                 else{

30                     node = s.top();

31                     s.pop();

32                     out.push_back(node->val);

33                     node = node->right;

34                 }

35             }

36         }

37         return out;

38     }

39     vector<int> postorderTraversal(TreeNode *root) {

40        vector<int> out;

41        stack<TreeNode*> s;

42        TreeNode* node = root;

43        s.push(node);

44        while(!s.empty()&&node){

45            node = s.top();

46            out.push_back(node->val);

47            s.pop();

48            if(node->left) s.push(node->left);

49            if(node->right)s.push(node->right);

50        }

51        reverse(out.begin(),out.end());

52        return out;

53     }

54 };

좋은 웹페이지 즐겨찾기