【信奥】判断平衡二叉树
本文最后更新于 1050 天前,其中的信息可能已经有所发展或是发生改变。

题面

输出

给定一个二叉树,判断它是否平衡。若平衡,则打印字符串”yes”,若不平衡,则打印字符串”no”。

平衡二叉树的定义是:一棵二叉树中每个节点的两个子树的高度之差不超过1。

输入

第一行一个正整数n,表示结点的个数

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

描述

若平衡,则打印字符串”yes”,若不平衡,则打印字符串”no”。

思路

如上一题,【信奥】求树的高度,可以先求出树的高度后,判断左右子树的绝对值是否大于1,对应输出yes、no。注意打flag,避免多次判断。

最终代码

#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;
bool flag=1;
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;
	if(abs(ll-rr)>1&&flag==1)
	{
		cout<<"no";
		flag=0;
	}
	return tmp;
}
int main()
{
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		scanf("%d %d", &tree[i].l, &tree[i].r);
	}
	geth(1);
	if(flag)
	{
		cout<<"yes";
	}
	return 0;
}
本文由吕舒君创作,转载请保留链接
暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇