让我们来写个算法吧,(2)二叉树的前序,中序,后序 遍历

树的类结构

public class TreeNode {
    
    TreeNode left;
    
    TreeNode right;
    
    int value;
    
    public TreeNode(int value ) {
        this.value = value;
    }

}

自己生成二叉树 

private TreeNode createTreeNode() {
        
        TreeNode[] node = new TreeNode[10];// 以数组形式生成一棵完全二叉树
        
        for (int i = 0; i < 10; i++) {
            node[i] = new TreeNode(i);
        }
        
        for (int i = 0; i < 10; i++) {
            if (i * 2 + 1 < 10)
                node[i].left = node[i * 2 + 1];
            if (i * 2 + 2 < 10)
                node[i].right = node[i * 2 + 2];
        }

        return node[0];
    }

生成的二叉树长这个样子

 二叉树的前序遍历就是,先输出根节点,再输出左子节点,最后输出右子节点

private void preOrderRe(TreeNode node) {
        if(null == node) {
            return;
        }
        System.out.print(node.value+" ");
        preOrderRe(node.left);
        preOrderRe(node.right);
    }

遍历结果 : 0 1 3 7 8 4 9 2 5 6 

二叉树的中序遍历就是,先输出左子节点,再输出根节点,最后输出右子节点

private void midOrderRe(TreeNode node) {
        if(null == node) {
            return;
        }
        if(node.left!=null) {
            midOrderRe(node.left);
        }
        System.out.print(node.value+" ");
        
        midOrderRe(node.right);
    }

遍历结果 : 7 3 8 1 9 4 0 5 2 6

二叉树的后中序遍历就是,先输出左子节点,再输出右子节点,最后输出根节点

    private void postOrderRe(TreeNode node) {
        if(null == node) {
            return;
        }
        if(node.left!=null) {
            postOrderRe(node.left);
        }
        postOrderRe(node.right);
        
        System.out.print(node.value+" ");
        
    }

遍历结果 : 7 8 3 9 4 1 5 6 2 0 

猜你喜欢

转载自www.cnblogs.com/leaveast/p/12381462.html