中序遍历二叉树

算法描述

中序遍历(LDR)的遍历顺序是先访问左节点,再访问根节点,最后访问右节点。简单来记就是左根右。

树的结构如下:

public class TreeNode{
    //节点结构
    int value;
    TreeNode left;
    TreeNode right;
    TreeNode(int value) {
        this.value = value;
    }
}

递归法

public static void midOrderRe(TreeNode biTree) {
        //中序遍历递归实现
        if(biTree == null)
            return;
        else {
            midOrderRe(biTree.left);
            midOrderRe(biTree.right);
        }
    }

非递归法——利用栈实现

我们可以利用栈来实现非递归的中序遍历。当结点或者栈不为空的时候我们循环执行操作——当结点不为空我们将结点入栈,并将其左子树节点作为新的节点进行操作;若其左节点为空,且栈非空则栈顶元素出栈,将结点的右子树作为新的节点,根据其是否为空进行入栈或出栈操作。(建议画图模拟算法过程)

public static void midOrder(TreeNode biTree) {
        //中序遍历非递归实现
        Stack<TreeNode> stack = new Stack();
        while(biTree != null || !stack.isEmpty()) {
            while(biTree != null) {
                stack.push(biTree);
                biTree = biTree.left;
            }
            if(!stack.isEmpty()) {
                biTree = stack.pop();
                biTree = biTree.right;
            }
        }
    }

   转载规则


《中序遍历二叉树》 cyyyys 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
java引入泛型的作用 java引入泛型的作用
###概述 java泛型是jdk1.5之后的新特性,泛型的本质是参数化乐行,也就是所操作的数据类型被指定为一个参数。这种参数类型可以在类、接口和方法的创建中,分别称为泛型类、泛型接口和泛型方法。我们可以将类型参数看作是使用参数化类型时指定的
2019-09-01
下一篇 
另一个树的子树 另一个树的子树
题目要求给定两个非空二叉树 s 和 t,检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。 示例 1:给定的树 s: 3 / \ 4 5
2019-08-31
  目录