首页 > 其他分享 >leetcode144,94,145

leetcode144,94,145

时间:2022-10-04 22:46:41浏览次数:48  
标签:node 145 leetcode144 94 遍历 result root stack cur

二叉树的前中后序遍历

递归方式:
1:确定递归函数的参数和返回值
2:确定终止条件
3:确定单层递归的逻辑

class Solution {
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> result = new ArrayList<Integer>();
        preorder(root, result);
        return result;
    }

    public void preorder(TreeNode root, List<Integer> result) {//确定返回值
        if (root == null) {    //确定终止条件
            return;
        }
        result.add(root.val);     //前序遍历   
        preorder(root.left, result);
        preorder(root.right, result);
    }
}

二叉树的非递归前中后序遍历(迭代法)

class Solution {  //前序遍历  进栈顺序:中左右
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> result=new ArrayList<Integer>();
        if(root==null){
            return result;
        }
        Stack<TreeNode> stack=new Stack<>();
        stack.push(root);  //根节点先入栈
        while(!stack.isEmpty()){   //根出栈,先存入数组中
            TreeNode node=stack.pop();
            result.add(node.val);  //先右孩子再左孩子入栈
            if(node.right!=null){
                stack.push(node.right);
            }
            if(node.left!=null){
                stack.push(node.left);
            }
        }
        return result;
    }

}
class Solution {
    public List<Integer> postorderTraversal(TreeNode root) {
        List<Integer> result=new ArrayList<Integer>();
        if(root==null){
            return result;
        }
        Stack<TreeNode> stack=new Stack<>();
        stack.push(root);
        while(!stack.isEmpty()){
            TreeNode node=stack.pop();
            result.add(node.val);
            if(node.left!=null){
                stack.push(node.left);//后续遍历只需要 调整一下  中左右,然后直接反转数组就可以得到后序遍历
            }
            if(node.right!=null){
                stack.push(node.right);
            }
        }
        Collections.reverse(result);
        return result;
    }
}

中序遍历的迭代法

前面的前序遍历,要处理的元素和遍历(遍历是先根再左或者右)的元素是一致的,所以可以同步处理,但是中序遍历却做不到,

class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> result=new ArrayList<Integer>();
        Stack<TreeNode> stack=new Stack<>();


        if(root==null){
            return result;
        }
        TreeNode cur=root;
        while(cur!=null||!stack.isEmpty()){
            if(cur!=null){
                stack.push(cur);   //左子树一直遍历到底,栈依次存入便利的节点。然后弹出每个节点(弹出的顺序是先子节点再父节点),弹出的节点存入数组中,
                cur=cur.left;
            }else{
                cur=stack.pop();   //遍历到底后,弹出栈(同时存入数组中),然后处理右节点
                result.add(cur.val);
                cur=cur.right;
            }
        }
        return result;
    }

}

标签:node,145,leetcode144,94,遍历,result,root,stack,cur
From: https://www.cnblogs.com/wdnmdp/p/16754683.html

相关文章

  • 「CF1455G」Forbidden Value 题解 (DP,线段树合并)
    题目简介已知初始值\(x=0\),给定下面\(2\)种命令:set\(y\)\(v\),令\(x=y\),或花费\(v\)元钱删除该命令;if\(y\)...end,如果\(x==y\),执行if...end中的命令,否则跳......
  • CF1455G
    Statement题目写的很清楚了,看题目的翻译吧。Solution考虑if指令形成了一个嵌套关系,是一个层层包含的过程。于是可以将每个if指令与被他包含的指令之间连边,然后在开......
  • CodeForces 1455G Forbidden Value
    洛谷传送门CF传送门小清新动态开点线段树优化dp题。首先题目中的if嵌套看起来就很烦,可以考虑建树,外面再套一层大的if0...end,这样就将本题转化成一个树上问题。......
  • P1941 [NOIP2014 提高组] 飞扬的小鸟
    [NOIP2014提高组]飞扬的小鸟题目描述FlappyBird是一款风靡一时的休闲手机游戏。玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的......
  • 代码随想录训练营|Day 14|Binary Tree, 144, 145, 94
    BinaryTrees树是由结点或顶点和边组成的(可能是非线性的)且不存在着任何环的一种数据结构。没有结点的树称为空(null或empty)树。一棵非空的树包括一个根结点,还(很可能)......
  • 竞赛-6194. 最小 XOR
    解题思路 1、二进制中num的1的数量等于num2中的1的数量 2、num1中二进制,和num前面相同,后面不同,这样异或操作后得到的最小, 3、相同部分不变,不同部分都是0,如果还有1......
  • CF1394C 题解
    传送门题意太长不说了。题解因为两个字符串相似的充要条件是任意重排,故可以不考虑\(B\)与\(N\)的相对顺序,只需记录各自的数量。以二者的数量建立坐标系,则一个字符......
  • P1216 [USACO1.5][IOI1994]数字三角形 Number Triangles
    这是一道动态规划的经典入门题,重点在于递规过程中存储计算结果,避免重复计算.当然直接简单粗暴使用递归也可以拿到部分分数.只是样例太大的话就过不了了.题目描述观......
  • 简单-1694. 重新格式化电话号码
    给你一个字符串形式的电话号码 number 。number 由数字、空格 ''、和破折号 '-' 组成。请你按下述方式重新格式化电话号码。首先,删除 所有的空格和破折号。其......
  • P2894 [USACO08FEB]Hotel G
    #include<bits/stdc++.h>usingnamespacestd;classsegment_tree{ public: intn,m; structtree{ intlen; intlm,rm; intmm; intlazy_tag; #d......