YTU OJ2344: 先序遍歷二叉樹
阿新 • • 發佈:2018-12-13
2344: 先序遍歷二叉樹
給定一顆二叉樹,要求輸出二叉樹的深度以及先序遍歷二叉樹得到的序列。本題假設二叉樹的結點數不超過1000。
輸入
輸入資料分為多組,第一行是測試資料的組數n,下面的n行分別代表一棵二叉樹。每棵二叉樹的結點均為正整數,資料為0代表當前結點為空,資料為-1代表二叉樹資料輸入結束,-1不作處理。二叉樹的構造按照層次順序(即第1層1個整數,第2層2個,第3層4個,第4層有8個......,如果某個結點不存在以0代替),比如輸入:
1 2 0 3 4 -1得到的二叉樹如下:
1
2 #
3 4
輸出
輸出每棵二叉樹的深度以及先序遍歷二叉樹得到的序列。
#include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<malloc.h> #include<math.h> using namespace std; typedef struct Node { int data; struct Node *lchild; struct Node *rchild; }BTNode; int depth=0; void CreatBTree(BTNode *T) { BTNode *a[110]; BTNode *p=T; int rear=0; while(cin>>p->data&&p->data!=-1) { a[++rear]=p; if(rear/2!=0) { if(rear%2) { a[rear/2]->rchild=p; } else { a[rear/2]->lchild=p; } } p->lchild=NULL; p->rchild=NULL; p=(BTNode *)malloc(sizeof(BTNode)); } depth=(int)ceil(log2(rear+1)); } void preOrder(BTNode *T) { if(T!=NULL) { printf(T->data?" %d":"",T->data); preOrder(T->lchild); preOrder(T->rchild); } } int main() { int n; BTNode *T; T=(BTNode *)malloc(sizeof(BTNode)); scanf("%d",&n); while(n--) { CreatBTree(T); printf("%d",depth); preOrder(T); printf("\n"); } return 0; }