【信奥】求树的高度

2,015次阅读
没有评论

共计 716 个字符,预计需要花费 2 分钟才能阅读完成。

题面

描述

根据输入数据建立一棵n个结点的二叉树,编号为1到n,其中编号为1的结点是根。编写程序求出二叉树的高度。二叉树的高度定义:叶结点高度为1,自底向上逐层累加,根节点的高度即为树的高度。

输入

第一行一个正整数n,表示结点的个数n行,第i行第一个数l表示第i个结点左孩子的序号,第二个数r表示第i个结点右孩子的序号,-1表示空

输出

本树的高度

思路

[v_error]树的高度有两种定义,根节点为0或1,本题已给出明确说明[/v_error]如题中的树【信奥】求树的高度而二叉树的高度定义:叶结点高度为1,自底向上逐层累加,根节点的高度即为树的高度。那么我们就可以采用分治的算法,将左右子树分别取高度,然后取其最大值+1即为本节点高度,如此分治到根节点即可。
本节点高=最大值(获得左子树高,获得右子树高)+1

最终代码

[v_blue]请根据编译器(OJ)需要添加C++11的引用[/v_blue]
#include<bits/stdc++.h>
using namespace std;
struct node
{
	int val;
	int l, r;
};
unordered_map<int,node> tree;
int n;
int ans=INT_MIN;
int geth(int root)
{
	if (root == -1) return 0;
	int ll=geth(tree[root].l);
	int rr=geth(tree[root].r);
	int tmp = max(ll,rr)+1;
	return tmp;
}
int main()
{
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		scanf("%d %d", &tree[i].l, &tree[i].r);
	}
	cout<<geth(1);
	return 0;
}
正文完
 
lvshujun
版权声明:本站原创文章,由 lvshujun 2020-06-09发表,共计716字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请联系站长并注明出处。
评论(没有评论)
验证码