当前位置:首页 » 《随便一记》 » 正文

判断是否为满二叉树(C++实现)_m0_58086930的博客

21 人参与  2021年11月21日 10:23  分类 : 《随便一记》  评论

点击全文阅读


//判断是否为满二叉树(递归法)    (结点个数n=2^h-1)
/*
step:   1)先求该书=树的最大深度h
		2)再求结点总个数n
		3)若n==2^h-1,则满
*/
class ReturnInfo {
public:
	int height;
	int no;//结点个数
	ReturnInfo(int h, int n) {
		height = h;
		no = n;
	}
};
bool isFBT(Node* head) {
	ReturnInfo info = process2(head);
	return info.no == (1 << info.height - 1);//左移h位相当于2的h次方
}
ReturnInfo process2(Node* head) {
	if (head == NULL)
		return ReturnInfo(0, 0);
	ReturnInfo leftInfo = process2(head->left);
	ReturnInfo rightInfo = process2(head->right);
	return ReturnInfo(max(leftInfo.height, rightInfo.height) + 1, leftInfo.no + rightInfo.no + 1);
}


点击全文阅读


本文链接:http://zhangshiyu.com/post/31117.html

结点  个数  递归  
<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1