日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

sdut 2136 数据结构实验之二叉树的建立与遍历

發布時間:2025/4/16 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sdut 2136 数据结构实验之二叉树的建立与遍历 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Problem Description

已知一個按先序序列輸入的字符序列,如abc,,de,g,,f,,,(其中逗號表示空節點)。請建立二叉樹并按中序和后序方式遍歷二叉樹,最后求出葉子節點個數和二叉樹深度。

Input

輸入一個長度小于50個字符的字符串。

Output

輸出共有4行:
第1行輸出中序遍歷序列;
第2行輸出后序遍歷序列;
第3行輸出葉子節點個數;
第4行輸出二叉樹深度。

Example Input

abc,,de,g,,f,,,

Example Output

cbegdfacgefdba35

Hint

#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 数据结构实验之二叉树的建立与遍历的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。