数据结构_二叉树的先序遍历(Java)(复习)

数据结构_二叉树(复习)

()内为理解方法和注释

二叉树

​ 每个节点的度最大为2(最多拥有两个子树)

补充:

树的深度:也称为树的高度

结点的度:一个结点拥有子树的数目称为结点的度

类型

  • 满二叉树: 深度为k的二叉树 其结点总数最多为2^k-1

  • 完全二叉树:最后一层 从左到右 连续缺少若干个结点

*注:满二叉树一定是完全二叉树,但完全二叉树不一定是满二叉树。

二叉树的性质

  1. 在二叉树中第 i 层的结点数最多为2^(i-1)(i ≥ 1)
  2. 高度为k的二叉树其结点总数最多为2^k-1( k ≥ 1)
  1. n0 = n2 + 1

    (叶结点为 n0,而其度为 2 的结点数为 n2)

  • n=n0+n1+n2

    ​ ( n是总结点数,因为度的数一共就这3种情况 )

  • n0=n2+1= (n/2 向上取整)

  • n=1+n1+2n2

    ​ (1代表根,然后统计各个子树的数目。不断加进去)

二叉树的先序遍历(Java)

数组储存二叉树对于索引为K的节点,其左孩子为(2K) 右孩子为( 2K+1)

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

    TreeNode(int value, TreeNode right, TreeNode left)
    {
        this.value = value;
        this.right = right;
        this.left = left;

    }
}
public class PreOrderTest {
    public static void main(String[] args) {
        TreeNode[] nodes = new TreeNode[10];
        //初始化了这个类型的数组
        for (int i = 0; i < 10; i++) {   //初始化这个数组里的给个对象
            nodes[i] = new TreeNode(i, null, null);
        }

        for (int i = 0; i < 10; i++) {
            //对于索引为K=1 开始的节点,其左孩子为(2*K) 右孩子为( 2*K+1)
            //i=0 开始
            if (i * 2 + 1 < 10) {
                //如果有左孩子
                nodes[i].left = nodes[i * 2 + 1];
            }
            if (i * 2+2 < 10) {
                // 如果有右孩子
                nodes[i].right = nodes[i * 2+2];
            }
        }
        preOrderRe(nodes[0]);
    }

    public static void preOrderRe(TreeNode treeNode) {
        System.out.print(treeNode.value);
        if (treeNode.left != null) {
            preOrderRe(treeNode.left);
        }
        if (treeNode.right != null) {
            preOrderRe(treeNode.right);
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值