[leetcode] 94. Binary Tree Ignorer Traversal에서 두 갈래 트리를 차례로 훑어봅니다.

1583 단어
Given a binary tree, return the inorder traversal of its nodes' values.
For example:
Given binary tree [1,null,2,3],
   1
    \
     2
    /
   3
return [1,3,2].

Note: Recursive solution is trivial, could you do it iteratively?
문제 풀이 사고방식: 두 갈래 나무의 반복은 기초이다. 구체적으로는 적어도 반복과 반복을 파악해야 한다. 반복은 각각 앞의 반복, 중간의 반복과 후속의 반복을 파악해야 한다.코드는 다음과 같습니다.
귀속 방법:
class Solution {
public:
    void getInorderData(TreeNode* root, vector & ret)
    {
        if(root == NULL) return;
        if(root->left != NULL) getInorderData(root->left,ret);
        ret.push_back(root->val);
        if(root->right != NULL) getInorderData(root->right,ret);
        return;
    }
    vector inorderTraversal(TreeNode* root) {
        vector ret;
        getInorderData(root,ret);
        return ret;
    }
};

교체 버전:
class Solution {
public:
    vector inorderTraversal(TreeNode* root) {
       vector ret;
       stack stk;
       TreeNode* curr = root;
       
       while(!stk.empty() || curr)
       {
           if(curr)
           {
               stk.push(curr);
               curr = curr->left;
           }else
           {
               curr = stk.top();
               ret.push_back(curr->val); // 
               stk.pop();
               curr = curr->right;
           }
       }
       
       return ret;
    }
};


참고 자료:https://discuss.leetcode.com/topic/3288/three-methods-to-solve-c

좋은 웹페이지 즐겨찾기