如何删除一棵普通二叉树的叶子结点?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何删除一棵普通二叉树的叶子结点?相关的知识,希望对你有一定的参考价值。

首先我们应该知道要删除的子节点的地址和其父节点的地址,父节点的地址应该在建树过程中存储。此时一个二叉树的节点中应该有三个指针:指向其左子结点的指针,指向其右子节点的指针还有指向其父节点的指针(在结构体定义时要注意啊)。当找到其父节点时,通过叶子节点的地址判断这个叶子节点是其父节点的左子结点还是右子节点。如果是其左子结点,那么将父节点指向左子结点的指针值赋为NULL,否则将其父节点指向右子节点的指针值赋为NULL。之后就可以释放我们要删除的叶子节点了。基本的删除思路就是这样的,建议自己建立二叉树并用代码实现。 参考技术A 完全二叉树叶子结点(度为0)的个数设为k,比度为2的结点数多一个
度为1的结点个数为0或1
则500=k
+
k-1
+
(0
or
1)
k=250
参考技术B 。。。。。。。。。。。布吉岛 参考技术C 这个我听过...没看过。

如何求完全二叉树的度为1的结点个数

方法1:

根据二叉树性质3可以反推度为1的结点个数,设完全二叉树的总结点个数为n,度为0的结点个数为n0,度为1的结点个数为n1,度为2的结点个数为n2 则

n=n0+n1+n2

n1=n-n0-n2

方法2:

我们知道完全二叉树的特点,它缺少结点时总是出现在叶子层(即最下面一层)的右子树开始连续缺少。

我们设完全二叉树的深度为k(k>1),则从第1层至第k-1层的结点总数为2^k-1个(根据二叉树性质2计算出来)且一定是奇数,所以完全二叉树最下面一层的最左子树开始计算,如果出现偶数个结点则不存在度为1的结点,反之度为1的结点个数一定是1。

若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。

完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。

(1)所有的叶结点都出现在第k层或k-l层(层次最大的两层)

(2)对任一结点,如果其右子树的最大层次为L,则其左子树的最大层次为L或L+l。

一棵二叉树至多只有最下面的两层上的结点的度数可以小于2,并且最下层上的结点都集中在该层最左边的若干位置上,则此二叉树成为完全二叉树,并且最下层上的结点都集中在该层最左边的若干位置上,而在最后一层上,右边的若干结点缺失的二叉树,则此二叉树成为完全二叉树。

扩展资料:

如果一棵具有n个结点的深度为k的二叉树,它的每一个结点都与深度为k的满二叉树中编号为1~n的结点一一对应,这棵二叉树称为完全二叉树。

可以根据公式进行推导,假设n0是度为0的结点总数(即叶子结点数),n1是度为1的结点总数,n2是度为2的结点总数,则 :

①n= n0+n1+n2 (其中n为完全二叉树的结点总数);又因为一个度为2的结点会有2个子结点,一个度为1的结点会有1个子结点,除根结点外其他结点都有父结点,

②n= 1+n1+2*n2 ;由①、②两式把n2消去得:n= 2*n0+n1-1,由于完全二叉树中度为1的结点数只有两种可能0或1,由此得到n0=n/2 或 n0=(n+1)/2。

简便来算,就是 n0=n/2,其中n为奇数时(n1=0)向上取整;n为偶数时(n1=1)。可根据完全二叉树的结点总数计算出叶子结点数。

参考资料:百度百科---完全二叉树

参考技术A

方法1:

根据二叉树性质3可以反推度为1的结点个数,设完全二叉树的总结点个数为n,度为0的结点个数为n0,度为1的结点个数为n1,度为2的结点个数为n2 则

  n=n0+n1+n2

  n1=n-n0-n2


方法2:

  我们知道完全二叉树的特点,它缺少结点时总是出现在叶子层(即最下面一层)的右子树开始连续缺少。我们设完全二叉树的深度为k(k>1),则从第1层至第k-1层的结点总数为2^k-1个(根据二叉树性质2计算出来)且一定是奇数,所以完全二叉树最下面一层的最左子树开始计算,如果出现偶数个结点则不存在度为1的结点,反之度为1的结点个数一定是1.

本回答被提问者和网友采纳
参考技术B 总点数为偶数时1个,否则没有

以上是关于如何删除一棵普通二叉树的叶子结点?的主要内容,如果未能解决你的问题,请参考以下文章

如何求完全二叉树的度为1的结点个数

二叉树的创建遍历查找删除

求代码:实现二叉树中所有结点左右子树的交换

排序二叉树的建立,查询与删除

树与二叉树

C++如何求二叉树中一个结点到根节点的路径?