二叉树的中序遍历(非递归)

binary-tree-inorder-traversal

http://www.nowcoder.com/questionTerminal/1b25a41f25f241228abd7eb9b768ab9b

总结二叉树的非递归实现:

  1. 先序遍历——采用栈和一个辅助指针,不断访问节点,并将左侧节点入栈,然后出栈访问右侧节点
  2. 中序遍历——采用栈和一个辅助指针,将左侧节点入栈,然后访问中间节点,最后再入栈右侧节点
  3. 后序遍历——最难的一个,采用栈和两个辅助指针,其中有一个辅助指针记录上一个访问的节点,如果是当前节点的右子节点,则访问当前节点

中序遍历如下:

//
// Created by jt on 2020/8/23.
//
#include <vector>
#include <stack>
using namespace std;


class Solution {
public:
    /**
     *
     * @param root TreeNode类
     * @return int整型vector
     */
    vector<int> inorderTraversal(TreeNode *root) {
        // write code here
        vector<int> res;
        if (!root) return res;
        stack<TreeNode *> st; TreeNode *p = root;
        while (!st.empty() || p) {
            while (p) {
                st.push(p);
                p = p->left;
            }
            if (!st.empty()) {
                TreeNode *node = st.top();
                st.pop();
                res.push_back(node->val);
                p = node->right;
            }
        }
        return res;
    }
};
刷遍天下无敌手 文章被收录于专栏

秋招刷题历程

全部评论

相关推荐

2024-12-26 20:46
复旦大学 C++
国棉17厂丶小王:拿了offer的那个周末晚上去网吧通宵,去网吧不知道玩什么刷了lc的每日一题,然后试着第一次打开了三角洲行动,从此少了一个已经刷了700道题的lc用户,但是烽火地带多了一只🐭🐭
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务