关于二叉树的定义网上有比较恏的介绍,在这里就简单介绍二叉树的一些性质
1)二叉树的第i层上至多有 2^(i-1)(i ≥1)个结点;
2)深度为 h 的二叉树中至多含有 2^h – 1 个结点;
3)若在任意一棵二叉树中有 n0 个叶子结点,有 n2 个度为 2 的结点则:n0 = n2 + 1。
特点:深度为h且含有2h-1个结点的二叉树为满二叉树。图示满二叉树结点编號为自上而下,自左而右
2)完全二叉树(左图)
特点:指深度为k的,有n个结点的且每一个结点都与深度为k的满二叉树中编号从1至n的结點一一对应,完全一致则为完全二叉树。(右图)
特点:又称AVL树它或为一棵空树,或具如下性质:其左子树和右子树都是平衡二叉树且左、右子树的深度之差的绝对值不超过1。左、右子树的深度之差为平衡因子平衡二叉树的平衡因子只能为0,-11。
关于二叉树的存储方式(顺序和链式存储)
用一组连续的存储单元存放二叉树的数据元素结点在数组中的相对位置蕴含着结点之间的关系。
其所需的存储單元数为:2^h-1= 24-1 = 15若父结点在数组中i下标处,其左孩子在2*i处右孩子在2*i+1处。
链式存储结构的每个结点由数据域、左指针域和右指针域组成左指針和右指针分别指向下一层的二叉树
放二叉树的数据元素。结点在数组中的相对位置蕴含着结点之间的关系
关于二叉树的三种遍历方式
(1)先序遍历(D L R): 访问根结点按先序遍历左子树,按先序遍历右子树
(2)中序遍历(L D R): 按中序遍历左子树,访问根结点按中序遍历右子树。
(3)后序遍历(L R D): 按后序遍历左子树按后序遍历右子树,访问根结点
还是直接上代码吧~~这里用的是链式存储结构,相对顺序存储结构前者所需存储容量更小,更易于理解~~
初始化二叉树添加数据
先序,中序后序遍历的递归算法(
递归真是个好東西~~,写出来的代码就是简洁~~)
计算总的节点数和叶子数
大概就这么多了想起了在补充吧~~
特点:又称AVL树,它或为一棵空树或具如下性质:其左子树和右子树都是平衡二叉树,且左、右子树的深度之差的绝对值不超过1左、右子树的深度之差为平衡因子,平衡二叉树的平衡洇子只能为3)平衡二叉树
特点:又称AVL树它或为一棵空树,或具如下性质:其左子树和右子树都是平衡二叉树且左、右子树的深度之差嘚绝对值不超过1。左、右子树的深度之差为平衡因子平衡二叉树的平衡因子只能为0,-11。