LeetCode binary-tree-inorder-traversal

题目描述

给出一棵二叉树,返回这棵树的中序遍历

例如:

给出的二叉树为{1,#,2,3},

   1↵    ↵     2↵    /↵   3↵

返回[1,3,2].

备注:递归的解法太没有新意了,你能用迭代的方法来解这道题吗?

如果你不清楚“{1,#,2,3}"的含义的话,请继续阅读

我们用如下方法将二叉树序列化:

二叉树的序列化遵循层序遍历的原则,”#“代表该位置是一条路径的终结,下面不再存在结点。

例如:

   1↵  / ↵ 2   3↵    /↵   4↵    ↵     5

上述的二叉树序列化的结果是:"{1,2,3,#,#,4,#,#,5}".

解题思路

/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector<int> inorderTraversal(TreeNode *root) {
        vector<int> res;  
        if(root == NULL)
            return res;
        stack<TreeNode *> st;  //利用栈的先进后出来保存节点
        TreeNode *p = root;
        while(!st.empty() || p){  //p存在或者栈不空的时候循环
            while(p){
                st.push(p);   //p入栈
                p = p->left;  //更新为左子树节点
            }
            p = st.top();  //将栈顶元素调出
            st.pop();   
            res.push_back(p->val);  //存入容器
            p = p->right;   //进入右子树
        }
        return res;
    }
};
发布了169 篇原创文章 · 获赞 9 · 访问量 4830

猜你喜欢

转载自blog.csdn.net/weixin_41317766/article/details/101030406