sdut 2136 数据结构实验之二叉树的建立与遍历
生活随笔
收集整理的這篇文章主要介紹了
sdut 2136 数据结构实验之二叉树的建立与遍历
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Problem Description
已知一個按先序序列輸入的字符序列,如abc,,de,g,,f,,,(其中逗號表示空節點)。請建立二叉樹并按中序和后序方式遍歷二叉樹,最后求出葉子節點個數和二叉樹深度。Input
輸入一個長度小于50個字符的字符串。Output
輸出共有4行:第1行輸出中序遍歷序列;
第2行輸出后序遍歷序列;
第3行輸出葉子節點個數;
第4行輸出二叉樹深度。
Example Input
abc,,de,g,,f,,,Example Output
cbegdfacgefdba35Hint
#include <iostream> #include <stack> #include <malloc.h> using namespace std; typedef struct btree {char data;btree *lchild,*rchild; }btree; char ch[51]; int i=0,sum=0; void createbtree(btree *&root) {char c;c=ch[i++];if(c==',')root=NULL;else{root=(btree *)malloc(sizeof(btree));root->data=c;createbtree(root->lchild);createbtree(root->rchild);} } void inorder(btree *&b) {if(b!=NULL&&b->lchild==NULL&&b->rchild==NULL)sum++;if(b!=NULL){inorder(b->lchild);cout<<b->data;inorder(b->rchild);} } void postorder(btree *&b) {stack<btree*>Stack;btree *p=b;do{while(p!=NULL){Stack.push(p);p=p->lchild;}bool flag=true;btree *r=NULL;while(!Stack.empty()&&flag){p=Stack.top();if(p->rchild==r){cout<<p->data;Stack.pop();r=p;}else{p=p->rchild;flag=false;}}}while(!Stack.empty()); } int dep( btree *&b) {int rdep,ldep;if(b==NULL)return 0;else{ldep=dep(b->lchild);rdep=dep(b->rchild);}return ldep>rdep?(ldep+1):(rdep+1); } int main() {btree *root;cin>>ch;createbtree(root);inorder(root);cout<<endl;postorder(root);cout<<endl;cout<<sum<<endl;cout<<dep(root)<<endl; }總結
以上是生活随笔為你收集整理的sdut 2136 数据结构实验之二叉树的建立与遍历的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sdut 2128 树结构练习——排序二
- 下一篇: sdut 3346 sdut 3344