leetcode 94. 二叉树的中序遍历

方法1:递归思路

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<int>result;
    vector<int> inorderTraversal(TreeNode* root) {
        Tranverse(root);
        return result;

    }
    void Tranverse(TreeNode* node)
    {
        if(node!= NULL)
        {
            if(node->left!=NULL)
            {
                 inorderTraversal(node->left);
            }
            result.push_back(node->val);
            if(node->right!=NULL)
            {
                inorderTraversal(node->right);
            }
        }
    }
};

方法2:迭代思路:

每到一个节点 A,因为根的访问在中间,将 A 入栈。然后遍历左子树,接着访问 A,最后遍历右子树。
在访问完 A 后,A 就可以出栈了。因为 A 和其左子树都已经访问完成。

代码

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<int>result; //定义一个数组,保存结果
    vector<int> inorderTraversal(TreeNode* root) {
        stack<TreeNode*>S;//用来存放节点
        TreeNode*Rt = root;
        while(Rt||S.size())
        {
            //遍历左子树
            while(Rt) //访问根节点及其左子树
            {
                S.push(Rt) ;//遇到根节点先存起来,直到把左子树遍历完
                Rt = Rt->left;
            }
            Rt = S.top();S.pop();//栈顶元素出栈    
            //访问根节点
            result.push_back(Rt->val);
            //遍历右子树
            Rt = Rt->right;
        }
        return result;
    }
};

 

posted @ 2021-09-26 15:53  A-inspire  Views(19)  Comments(0Edit  收藏  举报