• 数的三种遍历方式(迭代法)


    数的三种遍历方式(迭代法)

    思路:使用栈帮助存储树节点

    先序遍历

    public List<Integer> preorderTraversal(TreeNode root) {
    
            List<Integer> res = new ArrayList<>();
            Stack<TreeNode> s = new Stack<>();
            //防止输入为空
            if(root != null) {
                s.push(root);
            }
    
            while (!s.isEmpty()){
                //入栈时按照先右后左的顺序
                root = s.pop();
                if(root.right != null){
                    s.push(root.right);
                }
                if(root.left != null){
                    s.push(root.left);
                }
                res.add(root.val);
            }
    
            return res;
        }
    

    中序遍历

    public List<Integer> inorderTraversal(TreeNode root) {
            List<Integer> res = new ArrayList<>();
            Stack<TreeNode> s = new Stack<>();
    
            while ( root != null ||!s.isEmpty()){
    
                //如果当前节点部位空,我们以它为根节点,和左节点迭代入栈
                while (root != null){
                    s.push(root);
                    s.push(root.left);
                    //以左节点为根循环
                    root = s.pop();
                }
    
                //经过上述循环后,root的左节点一定为空
                root = s.pop();
                res.add(root.val);
                //接着我们遍历其右子树,如果右子树为空,则从栈中拿出元素回溯,如果栈也为空,则完成遍历
                root = root.right;
            }
    
    
            return res;
        }
    

    后序遍历

    public List<Integer> post_order(TreeNode root){
    
            List<Integer> res = new ArrayList<>();
            Stack<TreeNode> s = new Stack<>();
    
            if(root != null) {
                s.push(root);
            }
    
            //按照先序遍历的顺序,先入左再入右,将结果翻转即可
            while (!s.isEmpty()){
                root = s.pop();
                res.add(root.val);
                if(root.left != null) {
                    s.push(root.left);
                }
                if(root.right != null){
                    s.push(root.right);
                }
            }
    
            Collections.reverse(res);
    
            return res;
        }
    
    因为我喜欢追寻过程中的自己
  • 相关阅读:
    PE 合并节
    VirtualAddress与VirtualSize与SizeOfRawData与PointerToRawData的关系
    .net core publish 找不到视图
    c++ rc 文件内包含中文字符导致在unicod环境下编译乱码
    .net 5.0 ref文件夹的作用
    .net 5.0项目升级工具
    HttpWebRequest DNS缓存清理
    .net 5.0 发布命令总结
    关于dll not found 排查解决
    关于win7 无法识别sha256签名导致驱动无法安装的问题
  • 原文地址:https://www.cnblogs.com/IzuruKamuku/p/14359750.html
Copyright © 2020-2023  润新知