14-D. DS查找—二叉树平衡因子

本文介绍了一种计算二叉树每个结点平衡因子的方法,并通过后序遍历顺序输出这些平衡因子。采用数组存储二叉树结构,利用递归算法实现高度与平衡因子的计算。

14-动态查找与查找二叉树-
题目描述
二叉树用数组存储,将二叉树的结点数据依次自上而下,自左至右存储到数组中,一般二叉树与完全二叉树对比,比完全二叉树缺少的结点在数组中用0来表示。

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

–程序要求–

若使用C++只能include一个头文件iostream;若使用C语言只能include一个头文件stdio

程序中若include多过一个头文件,不看代码,作0分处理

不允许使用第三方对象或函数实现本题的要求

输入
测试次数t

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

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

输入样例
2
6 ABC00D
24 ABCD0EF0000H00000000000I

输出样例
A -1
D 0
B 1
I 0
H 1
E 2
F 0
C 2
A -2

#include<iostream>
using namespace std;

int height(char *a,int i,int n)//计算高度
{
    if(a[i]=='0'||i>=n)
        return 0;
    else
    {
        int lh=height(a,2*i+1,n)+1;
        int rh=height(a,2*i+2,n)+1;
        if(lh>rh)
            return lh;
        else
            return rh;
    }
}

void balance(char *a,int i,int n)//计算平衡因子->左子树的高度减去右子树的高度
{
    if(i<n && a[i]!='0')
    {
        balance(a,2*i+1,n);//递归
        balance(a,2*i+2,n);
        
        int lh=height(a,2*i+1,n);
        int rh=height(a,2*i+2,n);
        cout<<a[i]<<" "<<lh-rh<<endl;
    }
}

int main()
{
    int t,n,i;
    cin>>t;
    while(t--)
    {
        cin>>n;
        char a[n];
        for(i=0;i<n;i++)
            cin>>a[i];
        balance(a,0,n);
    }
    return 0;
}

分数 2 作者 DS课程组 单位 浙江大学 任何二叉搜索树中同一层的结点从左到右是有序的(从小到大)。 T F 分数 2 作者 DS课程组 单位 浙江大学 一棵有124个结点的完全二叉树,其叶结点个数是确定的。 T F 分数 2 作者 DS课程组 单位 浙江大学 对于一个有N个结点、K条边的森林,不能确定它共有几棵树。 T F 分数 2 作者 DS课程组 单位 浙江大学 二叉搜索树的查找和折半查找的时间复杂度相同。 T F 分数 2 作者 DS课程组 单位 浙江大学 若一个结点是某二叉树的中序遍历序列的最后一个结点,则它必是该树的前序遍历序列中的最后一个结点。 T F 分数 2 作者 DS课程组 单位 浙江大学 某二叉树的后序和中序遍历序列正好一样,则该二叉树中的任何结点一定都无右孩子。 T F 分数 2 作者 DS课程组 单位 浙江大学 某二叉树的前序和中序遍历序列正好一样,则该二叉树中的任何结点一定都无右孩子。 T F 分数 2 作者 DS课程组 单位 浙江大学 某二叉树的后序和中序遍历序列正好一样,则该二叉树中的任何结点一定都无左孩子。 T F 分数 2 作者 何钦铭 单位 浙江大学 将一棵完全二叉树存于数组中(根结点的下标为1)。则下标为23和24的两个结点是兄弟。 T F 分数 2 作者 陈越 单位 浙江大学 若A和B都是一棵二叉树的叶子结点,则存在这样的二叉树,其前序遍历序列为...A...B...,而中序遍历序列为...B...A...。 T F 分数 1 作者 陈越 单位 浙江大学 对AVL树中的任一结点,其右子树的高度一定比其左子树的高度要高。 T F 分数 2 作者 徐镜春 单位 浙江大学 若一棵平衡二叉树的所有非叶结点的平衡因子都是0,则其必为完美二叉树。 T F 分数 1 作者 李祥 单位 湖北经济学院 二叉树不是树的特殊情况(即度为 2 的树)。 T F 分数 5 作者 杨红梅 单位 山东科技大学 最佳二叉树是AVL树(平衡二叉树)。 T F 分数 5 作者 杨红梅 单位 山东科技大学 在查找树(二叉树排序树)中插入一个新结点,总是插入到叶结点下面。 T F 分数 5 作者 杨红梅 单位 山东科技大学 N个结点的二叉排序树有多种,其中树高最小的二叉排序树是最佳的。 T F 分数 1 作者 李廷元 单位 中国民用航空飞行学院 完全二叉树中,若一个结点没有左孩子,则它必是树叶。 T F 分数 1 作者 李廷元 单位 中国民用航空飞行学院 完全二叉树的存储结构通常采用顺序存储结构。 T F 分数 1 作者 DS课程组 单位 临沂大学 二叉树可以用二叉链表存储,树无法用二叉链表存储。 T F 分数 1 作者 DS课程组 单位 临沂大学 二叉树中序线索化后,不存在空指针域。 T F 分数 2 作者 徐镜春 单位 浙江大学 哈夫曼编码是一种最优的前缀码。对一个给定的字符集及其字符频率,其哈夫曼编码不一定是唯一的,但是每个字符的哈夫曼码的长度一定是唯一的。 T F 分数 1 作者 王东 单位 贵州师范学院 平衡二叉树中,若某个结点的左、右孩子的平衡因子为零,则该结点的平衡因子一定为零。 T F 分数 1 作者 王东 单位 贵州师范学院 完全二叉树的前序序列中,若结点u在结点v之前,则u一定是v的祖先。 T F 分数 1 作者 王东 单位 贵州师范学院 二叉树按某种顺序线索化后,任一结点均有指向其前驱和后继的线索。 T F 分数 1 作者 王东 单位 贵州师范学院 在中序线索二叉树中,每一非空的线索均指向其祖先结点。 T F 分数 1 作者 YJ 单位 西南石油大学 给定一棵树,可以找到唯一的一棵二叉树与之对应。 T F 分数 1 作者 YJ 单位 西南石油大学 树形结构中元素之间存在一个对多个的关系。 T F 分数 1 作者 YJ 单位 西南石油大学 度为二的树就是二叉树。 T F 分数 1 作者 YJ 单位 西南石油大学 哈夫曼树是带权路径长度最短的树,路径上权值较大的结点离根较近。 T F 分数 1 作者 ZXM 单位 西南石油大学 二叉树就是度为二的有序树。 T F 分数 1 作者 李祥 单位 湖北经济学院 关于哈夫曼树 哈夫曼树中一定没有度为 1 的结点。 T F 分数 1 作者 李祥 单位 湖北经济学院 哈夫曼树一定是完全二叉树。 T F 分数 1 作者 李祥 单位 湖北经济学院 一棵非空二叉树,若先序遍历与中序遍历的序列相同,则该二叉树所有结点均无左孩子。 T F 分数 1 作者 李祥 单位 湖北经济学院 非空二叉树的形态 一棵非空二叉树,若先序遍历与后序遍历的序列相反,则该二叉树所有结点均无左孩子。 T F 分数 1 作者 李祥 单位 湖北经济学院 非空二叉树的形态 一棵非空二叉树,若先序遍历与后序遍历的序列相反,则该二叉树所有结点均无右孩子。 T F 分数 1
最新发布
10-24
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值