学过,以前做过,所以顺带也做了迭代方法遍历二叉树

前序遍历

/**
     * <a href="https://leetcode.cn/problems/binary-tree-preorder-traversal/">144. 二叉树的前序遍历</>
     * <p>
     * 中 左 右
     */
    public List<Integer> preorderTraversal(TreeNode root) {
        List<Integer> list = new ArrayList<>();
        if (root == null) {
            return list;
        }
        list.add(root.val);
        list.addAll(preorderTraversal(root.left));
        list.addAll(preorderTraversal(root.right));
        return list;
    }

    public List<Integer> preorderTraversalByStack(TreeNode root) {
        List<Integer> list = new ArrayList<>();
        Stack<TreeNode> stack = new Stack<>();
        if (root == null) {
            return list;
        }
        stack.push(root);
        TreeNode pop;
        while (!stack.isEmpty()) {
            pop = stack.pop();
            if (pop.right != null) {
                stack.push(pop.right);
            }
            if (pop.left != null) {
                stack.push(pop.left);
            }
            list.add(pop.val);
        }
        return list;
    }

后序遍历

    /**
    * <a href="https://leetcode.cn/problems/binary-tree-postorder-traversal/">145. 二叉树的后序遍历</a>
    * <p>
    * 左 右 中
    */
   public List<Integer> postorderTraversal(TreeNode root) {
       List<Integer> list = new ArrayList<>();
       if (root == null) {
           return list;
       }
       list.addAll(postorderTraversal(root.left));
       list.addAll(postorderTraversal(root.right));
       list.add(root.val);
       return list;
   }

   public List<Integer> postorderTraversalByStack(TreeNode root) {
       List<Integer> list = new ArrayList<>();
       Stack<TreeNode> stack = new Stack<>();
       if (root == null) {
           return list;
       }
       stack.push(root);
       TreeNode pop;
       while (!stack.isEmpty()) {
           pop = stack.pop();
           if (pop.left != null) {
               stack.push(pop.left);
           }
           if (pop.right != null) {
               stack.push(pop.right);
           }
           list.add(pop.val);
       }
       Collections.reverse(list);
       return list;
   }

中序遍历

/**
     * <a href="https://leetcode.cn/problems/binary-tree-inorder-traversal/">94. 二叉树的中序遍历</a>
     * <p>
     * 左 中 右
     */
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> list = new ArrayList<>();
        if (root == null) {
            return list;
        }
        list.addAll(inorderTraversal(root.left));
        list.add(root.val);
        list.addAll(inorderTraversal(root.right));
        return list;
    }

    public List<Integer> inorderTraversalByStack(TreeNode root) {
        List<Integer> list = new ArrayList<>();
        Stack<TreeNode> stack = new Stack<>();
        if (root == null) {
            return list;
        }
        TreeNode pop = root;
        while (pop != null || !stack.isEmpty()) {
            if (pop != null) {
                stack.push(pop);
                pop = pop.left;
            } else {
                pop = stack.pop();
                list.add(pop.val);
                pop = pop.right;
            }
        }
        return list;
    }
posted @   维萨斯  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示