DS查找—二叉树平衡因子(代码三十行 思路超级简单!!)

题目描述

二叉树用数组存储,将二叉树的结点数据依次自上而下,自左至右存储到数组中,一般二叉树与完全二

叉树对比,比完全二叉树缺少的结点在数组中用0来表示。

计算二叉树每个结点的平衡因子,并按后序遍历的顺序输出结点的平衡因子。

–程序要求-- 若使用C++只能include一个头文件iostream;若使用C语言只能include一个头文件stdio 程序中若include多过一个头文件,不看代码,作0分处理 不允许使用第三方对象或函数实现本题的要求 输入 测试次数t

每组测试数据一行,数组元素个数n,后跟n个字符,二叉树的数组存储。

输出

对每组测试数据,按后序遍历的顺序输出树中结点的平衡因子(测试数据没有空树)

样例输入

2

6 ABC00D

24 ABCD0EF0000H00000000000I

样例输出
B 0

D 0
C 1
A -1
D 0
B 1
I 0
H 1
E 2
F 0
C 2
A -2

在这里插入图片描述

int a = 2;
		while(a/2 < n){ 
			a*=2;
		} 

这一段代码的作用是补全二叉树
当访问到D的时候,可以访问到空子树不会越界

#include<iostream>
using namespace std;

int height(char *arr,int n){  //获得当前结点的高度
	if(arr[n] == '0') return 0;
	return height(arr,n*2+1)>height(arr,n*2+2) ? height(arr,n*2+1) + 1: height(arr,n*2+2) + 1;
}

void output(char *arr,int n){ // 后序输出高度差
	if(arr[n] == '0') return ;
	output(arr,n*2+1);
	output(arr,n*2+2);
	cout<<arr[n]<<" "<<height(arr,n*2+1) - height(arr,n*2+2)<<endl;
}

int main(){
	int t;
	cin>>t;
	while(t--){
		char *arr;
		int n;
		cin>>n;
		int a = 2;
		while(a/2 < n){ 
			a*=2;
		} 
		arr = new char[a+3];
		for(int i = 0; i < n; i++){
			cin>>arr[i];
		}
		for(int i = n; i < a; i++){
			arr[i] = '0';  //补全二叉树变成满二叉树 ,让判断时访问不会越界 
		}
		output(arr,0); 
	}
	return 0;
}
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值