ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

二叉树--后序遍历的递归和非递归(leetcode 145

2020-07-04 22:06:55  阅读:229  来源: 互联网

标签:145 递归 temp 后序 遍历 二叉树 stack2 压入 stack1


非递归

思路1

用两个栈实现后序遍历的步骤:

  1. 申请一个栈stack1,将头节点压入栈中

  2. 将stack1中元素弹出,记为temp,依次将temp的左孩子,右孩子压入stack1(如果有的话

  3. 每个从stack1中弹出的元素都压入stack2

4.不断重复步骤2,3直到stack1为空停止

5.从stack2中依次弹出并打印就是后序遍历的顺序

总结:

后序遍历想要的结果是左右中。压入stack1的是中,然后弹出中,再依次向stack1压入左右,再从stack1弹出的就是右左。此时stack2中已经有中了,再压入右左。最后从stack2弹出的就是左右中。

代码:

public List<Integer> postorderTraversal(TreeNode root) {
    List<Integer> list = new LinkedList<>();
    if (root == null){return list;}
    Stack<TreeNode> stack1 = new Stack<>();
    Stack<TreeNode> stack2 = new Stack<>();
    stack1.push(root);
    TreeNode temp = root;
    while (!stack1.isEmpty()){
        temp = stack1.pop();
        stack2.push(temp);
        if (temp.left != null){
            stack1.push(temp.left);
        }
        if (temp.right != null){
            stack1.push(temp.right);
        }
    }
    while (!stack2.isEmpty()){
        list.add(stack2.pop().val);
    }
    return list;
}

思路2:用一个栈完成后序遍历

待补充


递归解法就是定义,略去不写

标签:145,递归,temp,后序,遍历,二叉树,stack2,压入,stack1
来源: https://www.cnblogs.com/swifthao/p/13236855.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有