1099. Build A Binary Search Tree (30)
来源:互联网 发布:淘宝购买流量怎么退款 编辑:程序博客网 时间:2024/06/05 17:20
题目详情: https://www.patest.cn/contests/pat-a-practise/1099
提交:
提交代码:
#include <iostream>#include <algorithm>using namespace std;#define N 110typedef struct Node{ int data; int leftChild; int rightChild;}Node;Node node[N]; //nodes[] are numbered from 0 to n-1,and 0 is always the rootint n,weight[N];int queue[N],front,rear,level[N],top = -1;int getChildNumber( int root,int &number) //得到以root为根节点的树中节点的个数,包括该根节点 { if( root != -1 ) { ++number; getChildNumber(node[root].leftChild,number); getChildNumber(node[root].rightChild,number); return number; } return 0;}void build( int root,int *weight ){ if( root == -1 ) return ; //没有节点直接返回 int leftNumber = 0,rightNumber = 0; leftNumber = getChildNumber(node[root].leftChild,leftNumber); //得到左子树的节点个数 rightNumber = getChildNumber(node[root].rightChild,rightNumber); //得到右子树的节点个数 cout<<"leftNumber is "<<leftNumber<<",rightNumber is "<<rightNumber<<endl; cout<<"will insert "<<weight[leftNumber]<<endl;9 node[root].data = weight[leftNumber]; build(node[root].leftChild,weight); //递归左子树 ,同时改变数组的起始地址,若不改会出现问题 build(node[root].rightChild,weight+leftNumber+1); //递归右子树,同时改变数组的起始地址 }void levelOrder( int start ){ queue[++rear] = start; while( front != rear ) { int key = queue[++front]; if( node[key].leftChild != -1 ) { queue[++rear] = node[key].leftChild; } if( node[key].rightChild != -1 ) { queue[++rear] = node[key].rightChild; } level[++top] = node[key].data; }}int main (){ cin>>n; for( int i=0;i<n;++i ) { int leftKid,rightKid; cin>>leftKid>>rightKid; node[i].leftChild = leftKid; node[i].rightChild = rightKid; } for( int i=0;i<n;++i ) cin>>weight[i]; sort(weight,weight+n); //使weight数组有序 ,以便建立二叉树时使用 build(0,weight); //建立该二叉树 rear = front = -1; //层次遍历前的初始化操作 levelOrder(0); //进行层次遍历 for( int i=0;i<=top;++i ) //输出层次遍历的序列 { if( i == rear ) cout<<level[i]<<endl; else cout<<level[i]<<" "; } return 0;}
虽然通过了测试但是有个地方搞不懂,就是在getChildNumber()函数中,如果不加最后一句代码,即:return 0;会返回-1,这个地方不明白,希望得到大神指点!
0 0
- 1099. Build A Binary Search Tree (30)
- 1099. Build A Binary Search Tree (30)
- 1099. Build A Binary Search Tree (30)
- 1099. Build A Binary Search Tree (30)
- 1099. Build A Binary Search Tree (30)
- 1099. Build A Binary Search Tree (30)
- 1099. Build A Binary Search Tree (30)
- 1099. Build A Binary Search Tree (30)
- 1099. Build A Binary Search Tree (30)
- 1099. Build A Binary Search Tree (30)
- 1099. Build A Binary Search Tree (30)
- 1099. Build A Binary Search Tree (30)
- 1099. Build A Binary Search Tree (30)
- 1099. Build A Binary Search Tree (30)
- 1099. Build A Binary Search Tree (30)
- 1099. Build A Binary Search Tree (30)
- 1099. Build A Binary Search Tree (30)
- 1099. Build A Binary Search Tree (30)
- Linux学习(常用命令1)
- Java线程:新特征-阻塞栈
- el表达试中三元用法
- No result defined for action action.UserAction and result input
- 孤儿进程
- 1099. Build A Binary Search Tree (30)
- 自我介绍
- TextView处理Html文本超链接事件
- 触摸手势
- android 禁止手机截屏
- hibernate query.list查询速度慢
- MTK lk源码解析2( lk 阶段main.c中的kmain.c函数解析)
- Tomcat 启动慢
- android用okhttp搭建网络通讯(附服务器端代码)