树的相关知识

树的相关知识

树是由节点构成,

也可以是没有节点,空树。

最底端有一个根节点,根节点是特殊的节点,一棵树,只有一个。

从根节点触发,每个节点都可以有多个子节点。

当一个节点没有子节点的情况下,我们称它为 叶子节点。

树的深度:树有多少层

二叉树

每个节点至多有两个子节点的树。

二叉搜索树

每一个节点而言,左边的永远比父节点小,右边的永远比父节点大

这样的树我们称之为:

二叉查找树 or 二叉搜索树 or 二叉排序树

二叉树的遍历

先序遍历(先根遍历):根、左、右

中序遍历(中根遍历):左、根、右

后序遍历(后根遍历):右、根、左

根 左孩子 根 右孩子 根

Java代码的实现
public class Test04 {
    public static void main(String[] args) {
//        Node tree=new Node();
//        tree.value=5;
//        tree.left=new Node();
//        tree.left.value=4;
//        tree.right=new Node();
//        tree.right.value=6;
        int [] a={5,6,8,7,2,9,1,3,4};
        Node tree=new Node();
        tree.value=a[0];
        for (int i = 1; i < a.length; i++) {
            insertToTree(tree,a[i]);
        }

        System.out.println(tree.right.right.left.value);

        System.out.println(tree.left.right.right.value);

        System.out.println("-------------------------");
        printTree(tree);
    }

    private static void printTree(Node tree){
        //遍历根节点
        System.out.print(tree.value+" ");
        //遍历左子树
        if(tree.left!=null){
            printTree(tree.left);
        }
        //遍历右子树
        if(tree.right!=null) {
            printTree(tree.right);
        }
    }

    private static  void insertToTree(Node tree,int value){
        if(tree.value>value){
            //放左边
            if(tree.left==null){
                tree.left=new Node();
                tree.left.value=value;
            }else{
                //就把value放入左子树中
                insertToTree(tree.left,value);
            }
        }else{
            //放右边
            if(tree.right==null){
                tree.right=new Node();
                tree.right.value=value;
            }else{
                //就把value放入右子树中
                insertToTree(tree.right,value);
            }
        }
    }
    static class Node{
        int value;
        Node left;
        Node right;
    }
}

面试题测试

面试题:

已知二叉树的

先序遍历结果为:1 2 4 6 3 5 7 8

中序遍历结果为:2 6 4 1 7 5 8 3

求后序遍历结果。

后序遍历:6 4 2 7 8 5 3 1

满二叉树

满二叉树:深度为k且节点个数为2^k-1。

一颗满二叉树,节点数为n,深度为多少?

2^k-1=n

2^k=n+1

K=log(n+1)

完全二叉树

给一颗满二叉树,由根开始逐层从左至右标号,在满二叉树的基础上,删去编号最高的节点,就得到一颗完全二叉树;在完全二叉树的基础上,删去编号最高的节点,也可得到一颗完全二叉树

面试题测试

一颗完全二叉树,深度为k,它至少有多少个叶子节点?

K-1的满二叉树

2^(k-2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值