首页 > 其他分享 >二叉树后序遍历非递归遍历实现图解

二叉树后序遍历非递归遍历实现图解

时间:2023-08-09 14:32:38浏览次数:39  
标签:遍历 cur 后序 int top list 二叉树 null stack


二叉树的后序遍历

输入:

{1,#,2,3}

返回值:

[3,2,1]

输入:

{1}

返回值:

[1]

代码实现

      public int[] postorderTraversal (TreeNode root) {
            TreeNode cur = root;
            List<Integer> list = new ArrayList<>();
            Deque<TreeNode> stack = new ArrayDeque<>();
             TreeNode pre = null;
            while(!stack.isEmpty() || cur != null) {
                while(cur != null){
                    stack.push(cur);
                    cur = cur.left;
                }
               
                TreeNode top = stack.pop();
                if(top.right == null || top.right == pre) {
                    list.add(top.val);
                    pre = top;
                } else {
                    stack.push(top);
                    cur = top.right;
                }
            }
            int [] arr = new int[list.size()];
            for(int i = 0; i < list.size(); i++) {
                arr[i] = list.get(i);
            }
            return arr;
        }

图解

二叉树后序遍历非递归遍历实现图解_二叉树遍历

二叉树后序遍历非递归遍历实现图解_二叉树遍历_02

二叉树后序遍历非递归遍历实现图解_二叉树遍历_03

二叉树后序遍历非递归遍历实现图解_二叉树遍历_04

二叉树后序遍历非递归遍历实现图解_二叉树遍历_05

发现bug

二叉树后序遍历非递归遍历实现图解_二叉树遍历_06

我们就可以添加一个判断标志防止出现死循环

二叉树后序遍历非递归遍历实现图解_二叉树遍历_07

标签:遍历,cur,后序,int,top,list,二叉树,null,stack
From: https://blog.51cto.com/u_16166203/7020381

相关文章

  • python 文件夹遍历三种方法
    os.listdir(path),返回path目录下的文件夹和文件,但不包含子文件夹里的文件夹和文件递归遍历所有文件importosdefrecursive_listdir(path):files=os.listdir(path)forfileinfiles:file_path=os.path.join(path,file)ifos.path.isfile......
  • 144. 二叉树的前序遍历
    给你二叉树的根节点 root ,返回它节点值的 前序 遍历。示例1:输入:root=[1,null,2,3]输出:[1,2,3]示例2:输入:root=[]输出:[]示例3:输入:root=[1]输出:[1]示例4:输入:root=[1,2]输出:[1,2]classSolution:defpreorderTraversal(self,root:Optional[TreeNode])->Li......
  • 145. 二叉树的后序遍历
    给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。示例1:输入:root=[1,null,2,3]输出:[3,2,1]示例2:输入:root=[]输出:[]classSolution:defpostorderTraversal(self,root:Optional[TreeNode])->List[int]:res=[]defdfs(node):......
  • 剑指 Offer 28. 对称的二叉树(简单)
    题目:classSolution{public:booltraversal(TreeNode*left,TreeNode*right){//递归判断左右两个**镜像**节点if(left==nullptr&&right!=nullptr)returnfalse;elseif(left!=nullptr&&right==nullptr)returnfalse;el......
  • [代码随想录]Day12-二叉树part01
    今天的题目就是二叉树的前中后序遍历,目前只写了递归方法,之后再补迭代方法。题目:144.二叉树的前序遍历思路:前序遍历:根-左-右代码1:递归,递归情况下只需要改变递归的顺序即可实现前中后序遍历。/***Definitionforabinarytreenode.*typeTreeNodestruct{*Va......
  • 遇到的问题-----c#操作mongodb用foreach遍历集合报错curcor not found
    foreach(varttdocindatabase.GetCollection("集合名").FindAll()){}执行了一部分就报错curcornotfound了 原因是curcor有一定的时限如果数据太多的话可考虑分几部分来处理vardata=database.GetCollection("集合名");......
  • 递归遍历QTreeView+QStandrdItemModel
    //递归遍历点击查看代码voiditerateTreeViewNodes(constQModelIndex&parentIndex,QStandardItemModel*model,QVector<QStandardItem*>&items){ introwCount=model->rowCount(parentIndex); intcolumnCount=model->columnCount(parentIndex); ......
  • 剑指 Offer 32 - III. 从上到下打印二叉树 III(中等)
    题目:解法一:classSolution{public:voidtraversal(TreeNode*cur,vector<vector<int>>&result,intdepth){if(cur==nullptr)return;if(result.size()==depth)result.push_back(vector<int>());result[depth].pu......
  • 王道408--数据结构--用数组实现二叉树--并查集及其优化代码
    一、数组实现二叉树(下标从0开始)#include<stdio.h>typedefstruct_TreeNode{intdata;boolIsEmpty;//结点是否为空//因为我们的二叉树不一定是满二叉树,中间可能有一些节点不存在//值为1代表空}TreeNode;//初始化voidInitTreeNode(TreeNodet[......
  • 剑指 Offer 32 - I. 从上到下打印二叉树(中等)
    题目://考察BFS(广度优先搜索)classSolution{public:vector<int>levelOrder(TreeNode*root){if(root==nullptr)return{};//一定不要漏了排除空树的情况vector<int>result;deque<TreeNode*>que;//用一个队列,利......