栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

二叉树树形输出以及一些简单的计算

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

二叉树树形输出以及一些简单的计算

大体思路

采用到vector容器,使用它可以轻松的进行内容转置(行竖向输出)。

采用中序排序的方法(这样子才能保证双亲在左、右孩子之间),对节点竖向的位置进行横向保存到vector容器中,这样就能保证每一行只有一个节点,不用考虑多个节点如何输出等麻烦问题。根据节点所在层数确定节点前面的空格数,根据二叉树的深度确定字符串长度(在字符串后补空格)。最后把保存在容器中的字符串转置输出(横向向转竖向)输出二叉树。

下面代码只给出了计算深度(控制字符串长度需要用到),转置,输出二叉树的代码。

//计算高度
int Depth(BiTree t) {
    if (t == nullptr) return 0;
    else {
        int m = Depth(t->lchild);
        int n = Depth(t->rchild);
        if (m > n) return (m + 1);
        else return (n + 1);
    }
}
//对二叉树进行转置
void GetConvertedBTree(BiTree node, int &depth,
					   int layer,vector &outputBTree){
    int i;
    if(node==nullptr) return;
    GetConvertedBTree(node->lchild,depth,layer+1,outputBTree);
    string row;
    for(i=0;i<2*layer-1;i++){
        row.append(" ");        //通过节点所在层数确定前面的空格数,
    }
    if(layer>0){
        row.append("|");       //在每个节点之前添加|
    }
    row.append(1,node->data);//往row后添加一个字符
    row.resize(2*depth+1, ' ');		//通过深度确定后面的空格数
    outputBTree.push_back(row);     //向量尾部添加元素row
    GetConvertedBTree(node->rchild,depth,layer+1,outputBTree);
}
//输出,遍历序列输出二叉树
void PrintBTree(BiTree node){
    int depth = Depth(node) -1;
    if(depth == 0){
        cout<<"这是一个空的二叉树!"< outputBTree;
        GetConvertedBTree(node,depth,0,outputBTree);
        //调整方向后树形格式的二叉树
        cout<<"二叉树树形是:"<
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/589200.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号