有哪个大佬会吗
1条回答 默认 最新
- CSDN专家-赖老师(软件之家) 2021-11-22 14:44关注
#include<bits/stdc++.h> using namespace std; typedef struct BNode{ char data; struct BNode *lchild; struct BNode *rchild; }BNode; const int N = 100; char str[N]; //存储先序遍历序列 int i; //标记处理到哪一个字符了 BNode *BulidTree(){ if(str[i] == '#'){ i++; //处理下一个字符 return NULL; }else{ //新建一个结点 BNode *p = (BNode *)malloc(sizeof(BNode)); p->data = str[i]; p->lchild = NULL; p->rchild = NULL; i++; p->lchild = BulidTree(); p->rchild = BulidTree(); return p; } } //非递归算法 int Depth(BNode *root){ int level = 0; //level为层数 BNode *last = root;//last为下一层的最右结点 if(root == NULL){ //树空,则高度为0 return 0; } queue<BNode *> treenode; //申请一个队列 treenode.push(root); //根结点入队 while(!treenode.empty()){ //队不空时循环 BNode *p = treenode.front(); //队首 treenode.pop(); //根结点出队 if(p->lchild != NULL){ //如果存在左子树,则左子树根结点入队 treenode.push(p->lchild); } if(p->rchild != NULL){ //如果存在右子树,则右子树根结点入队 treenode.push(p->rchild); } if(p == last){ //如果刚才出队的是该层最右结点 level++; //层数加1 last = treenode.back(); //last指向下层 } } return level; } //递归算法 // int Depth2(BNode *root){ // if(root == NULL){ //空树,高度为0 // return 0; // } // int left = Depth2(root->lchild); //左子树高度 // int right = Depth2(root->rchild); //右子树高度 // return (left>right? left+1 : right+1); //树的高度为最大子树的高度加上根结点 // } int main(){ scanf("%s",str); i = 0; BNode *root = BulidTree(); int level = Depth(root); printf("%d\n",level); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 1无用
悬赏问题
- ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
- ¥20 有人知道这种图怎么画吗?
- ¥15 pyqt6如何引用qrc文件加载里面的的资源
- ¥15 安卓JNI项目使用lua上的问题
- ¥20 RL+GNN解决人员排班问题时梯度消失
- ¥15 使用LM2596制作降压电路,一个能运行,一个不能
- ¥60 要数控稳压电源测试数据
- ¥15 能帮我写下这个编程吗
- ¥15 ikuai客户端l2tp协议链接报终止15信号和无法将p.p.p6转换为我的l2tp线路
- ¥15 phython读取excel表格报错 ^7个 SyntaxError: invalid syntax 语句报错