【数据结构——树】二叉树面试相关知识点总结(二)

11.求二叉树第K层的节点个数
13. 由前序遍历序列和中序遍历序列重建二叉树
14. 求二叉树中两个节点的最低公共祖先节点
15. 求二叉树中节点的最大距离
16.二叉树的非递归实现

17.二叉查找树

11.将二叉查找树变为有序的双向链表

18.伸展树

19.B树


【11】求二叉树第K层节点个数

递归解法:
(1)如果二叉树为空或者k<1返回0
(2)如果二叉树不为空并且k==1,返回1
(3)如果二叉树不为空且k>1,返回左子树中k-1层的节点个数与右子树k-1层节点个数之和

<span style="font-size:12px;color:#333333;">/*************求二叉树第k层的节点个数**************/
int GetNodeNumKthLevel(BiTreeNode* &T,int k)
{
	if(k == 0 || T == NULL)return 0;
	if(k == 1) return 1;
	int numleft = GetNodeNumKthLevel(T->lchild,k-1);//左子树中K-1层的节点个数
	int numright = GetNodeNumKthLevel(T->rchild,k-1);//左子树中K-1层的节点个数
	return(numleft + numright);
}</span>


[15]节点的最大距离

递归解法:

1.根节点高度为0,每经过一个节点,树的高度加1,递归遍历,返回左右子树中的最大值

2.每次遍历更新节点间的最大距离


int tree_hight(BiTreeNode* pRoot,int& maxLen)
{
	if(pRoot == NULL) return -1;

	int pLeftLen = tree_hight(pRoot->pLeft,maxLen) +1;
	int pRightLen= tree_hight(pRoot->pRight,maxLen) +1;

	maxLen = max(pLeftLen + pRightLen,maxLen);

	return pLeftLen > pRightLen ? pLeftLen : pRightLen; 
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值