二叉树总结和二叉树基本操作

一、树的相关术语:

结点的度: -个结点的子树的数量。

树的度:该树中结点的最大度数。

叶结点和分支结点:度为的结点和度不为0的结点。

树的深度:树中结点的最大层数。

有序树和无序树:树中每个结点的各子树看成是从左到右有次序的称为有序树(- 般都是), 反之无序森林: m (m>0)棵互不相交的树的集合。

树的表示:(A(B(E,F(I,J)),C,D(G,H)))

二、二叉树的概念:

1.五种基本形态:空,仅有根结点,仅有左子树,仅有右子树,有左右子树.

2.与树的区别:最大度为2;结点有左右之分。

3.满二叉树:除最下一层结点外,每层都有2个子结点。

完全二叉树:除最后-层外,其他各层的结点数都达到最大个数;且最后一层从左往右结点连续。4.性质:

(1)在二叉树的第i层上至多有2^(i-1)个结点。

(2)深度为k的二-叉树至多有2^k-1个结点(k21),最少有k个结点。

(3)对任何一颗二叉树,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1。

(4)有n个节点的完全二叉树的深度为[log2n]+1, 其中log2n]+1向下取整。

(5)如果有-颗有n个节点的完全二 叉树的节点按层次序编号,对任一层的节点i (1<=i<=n) 有

        1.如果i=1,则节是二叉树的根,无双亲,如果i>1,则其双亲节点为i/2,向下取整

        2.如果2i>n那么节点没有左孩子,否则其左孩子为2i

        3.如果2i+ 1>n那么节点没有右孩子,否则右孩子为2i+1

三、二叉树的创建

        

public class TreeNode {
    public int val;
    public TreeNode left;
    public TreeNode right;

    public TreeNode(int val) {
        this.val = val;
    }
}

四、二叉树的遍历(递归)

NLR:前序遍历(Preorder Traversal亦称先序遍历)一-访问根结点->根的左子树--->根的右子树。LNR:中序遍历(Inorder Traversal)--根的左子树->根节--->根的右子树。

LRN:后序遍历(Postorder Traversal)--根的左子树-->根的右子树-->根节点。

//前序遍历
    public void preOrder(TreeNode root){
        if(root == null){
            return;
        }
        System.out.print(root.val +" ");
        preOrder(root.left);
        preOrder(root.right);
    }

    //中序遍历
    public void inOrder(TreeNode root) {
        if (root == null) {
            return;
        }
        inOrder(root.left);
        System.out.print(root.val +"");
        inOrder(root.right);

    }

    //后序遍历
    public void postOrder(TreeNode root){
        if(root == null){
            return;
        }
        preOrder(root.left);
        preOrder(root.right);
        System.out.print(root.val +" ");
    }

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值