首页 > 其他 > 详细

二叉树前、中、后遍历详解【递归+迭代+morris】

时间:2020-10-28 09:18:43      阅读:33      评论:0      收藏:0      [点我收藏+]

转自:https://leetcode-cn.com/problems/binary-tree-preorder-traversal/solution/leetcodesuan-fa-xiu-lian-dong-hua-yan-shi-xbian-2/

1.递归解法

前中后遍历都很简单,就不写了。

2.迭代解法

力扣144题,二叉树的前序遍历:前序遍历的迭代解法,也是比较简单,利用栈先入根节点,根节点弹出,再入右子节点和左子节点,那么之后就是左子节点先弹出进行遍历,右子节点们一直被压栈。

class Solution {
public:
    vector<int> preorderTraversal(TreeNode* root) {
        vector<int> ans;
        if(!root) return ans;
        stack<TreeNode*> st;
        st.push(root);
        while(!st.empty()){
            TreeNode* t=st.top();st.pop();
            ans.push_back(t->val);
            if(t->right)st.push(t->right);
            if(t->left)st.push(t->left);
        }
        return ans;
    }
};

力扣94题,二叉树的中序遍历:

Java版本的代码:

public static void inOrderIteration(TreeNode head) {
    if (head == null) {
        return;
    }
    TreeNode cur = head;
    Stack<TreeNode> stack = new Stack<>();
    while (!stack.isEmpty() || cur != null) {
        while (cur != null) {
            stack.push(cur);
            cur = cur.left;
        }
        TreeNode node = stack.pop();
        System.out.print(node.value + " ");
        if (node.right != null) {
            cur = node.right;
        }
    }
}

作者:gre-z
链接:https://leetcode-cn.com/problems/binary-tree-preorder-traversal/solution/leetcodesuan-fa-xiu-lian-dong-hua-yan-shi-xbian-2/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

内部的while循环表示处理左子树,然后node就是当前的节点,也就相当于此子树中的根节点,然后right了就是去遍历右子树了。

3月份的时候学习过,当然过了7个月到现在已经全忘记了。。。

 

二叉树前、中、后遍历详解【递归+迭代+morris】

原文:https://www.cnblogs.com/BlueBlueSea/p/13888630.html

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