首页 > 其他 > 详细

leetcode 二叉树的中序遍历(递归与非递归) 简单

时间:2021-08-03 22:46:08      阅读:42      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 

递归很简单,不说了。

非递归:用栈来模拟整个递归的过程,但是栈放一个 pair<TreeNode*, bool>,bool 为 false 表示当前这个节点并未向左延伸

class Solution {
public:
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int> ans;
        stack<pair<TreeNode*, bool>> stk;   // bool = false 表示向左扩展
        if(root) stk.push({root, false});
        while(!stk.empty()) {
            pair<TreeNode*, bool> &top = stk.top();
            if((!top.second && top.first -> left == nullptr) || top.second) {
                ans.emplace_back(top.first -> val);
                stk.pop();
                if (top.first -> right) stk.push({top.first -> right, false});
                continue;
            }
            if(!top.second) {
                top.second = true;
                stk.push({top.first -> left, false});
                continue;
            }
            if (top.first -> right) stk.push({top.first -> right, false});
        }
        return ans;
    }
};

 

leetcode 二叉树的中序遍历(递归与非递归) 简单

原文:https://www.cnblogs.com/rookie-acmer/p/15096579.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!