首页 > 其他分享 >学过,以前做过,所以顺带也做了迭代方法遍历二叉树

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

时间:2022-12-21 23:55:52浏览次数:39  
标签:return 迭代 顺带 list pop 二叉树 null root stack

前序遍历

/**
     * <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;
    }

标签:return,迭代,顺带,list,pop,二叉树,null,root,stack
From: https://www.cnblogs.com/Chain-Tian/p/16997473.html

相关文章

  • 【算法实践】他山之石,可以攻玉--利用完全二叉树快速实现堆排序
    前言什么是堆堆是一种数据结构,它是完全二叉树或者是近似完全二叉树的一种数据结构,树中每个结点的值都不小于(或不大于)其左右孩子结点的值。何为完全二叉树完全二叉树是一种......
  • 求二叉树的深度
    求二叉树的深度TimeLimit:1000MSMemorylimit:65536K题目描述已知一颗二叉树的中序遍历序列和后序遍历序列,求二叉树的深度。输入T组数据。每组数据包括两个长......
  • 数据结构实验之求二叉树后序遍历和层次遍历
    数据结构实验之求二叉树后序遍历和层次遍历TimeLimit:1000MSMemorylimit:65536K题目描述 已知一棵二叉树的前序遍历和中序遍历,求二叉树的后序遍历。输入......
  • C#迭代器foreach
    自己建立的类中,可以通过迭代器列出所有的成员  需用到  IEnumerable建立  Students 类,通过迭代列出所有的student的id和name classStudent{......
  • 数据结构-二叉树遍历非递归
    前序遍历voidpreorder(BTNODEBT){BTNODESTACK[100];inttop=-1;STACK[++top]=BT;BTNODEp=null;while(top!=-1){BTNO......
  • 二叉树的最大/最小深度
    1.深度与高度二叉树节点的深度:指从根节点到该节点的最长简单路径边的条数或者节点数(取决于深度从0开始还是从1开始)二叉树节点的高度:指从该节点到叶子节点的最长简单路径......
  • LeetCode 102_二叉树的层序遍历
    LeetCode102:二叉树的层序遍历题目给你二叉树的根节点root,返回其节点值的层序遍历。(即逐层地,从左到右访问所有节点)。示例1:输入:root=[3,9,20,null,null,15,7]......
  • 剑指offer 二叉树的深度(C++)
    题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。代码实现/*structTreeNode{intval;......
  • 剑指offer 二叉树的镜像(C++)
    问题描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树8/\610/\/\57911镜像二叉树......
  • LeetCode 有关二叉树的算法题目(C++)
    0、NULL与nullptr的区别在C语言中,​​NULL​​​通常被定义为:​​#defineNULL((void*)0)​​​。因为在C语言中把空指针赋给​​int​​​和​​char​​​指针的时候,发......