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

二叉树树形输出以及一些简单的计算,第1张

二叉树树形输出以及一些简单的计算 大体思路

采用到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<<"二叉树树形是:"<					
										


					

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/zaji/5594588.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存