當(dāng)前位置:
首頁 >
POJ 1577 Falling Leaves (子母二叉树,给出叶子节点的删除序列,求前序遍历)
發(fā)布時間:2025/3/21
43
豆豆
生活随笔
收集整理的這篇文章主要介紹了
POJ 1577 Falling Leaves (子母二叉树,给出叶子节点的删除序列,求前序遍历)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
題意:給出一棵字母二叉樹刪除葉子節(jié)點的序列,按刪除的順序排列。讓你輸出該棵二叉樹額前序遍歷的序列。
思路:先把一棵樹的所有刪除的葉子節(jié)點序列存儲下來,然后從最后一行字符串開始建樹即可,最后遍歷輸出。
??? 這里為方便起見,將子母轉(zhuǎn)化成整數(shù)值存儲。
?
#include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> /* AC 題意:給出一棵字母二叉樹刪除葉子節(jié)點的序列,按刪除的順序排列。讓你輸出該棵二叉樹額前序遍歷的序列。 思路:先把一棵樹的所有刪除的葉子節(jié)點序列存儲下來,然后從最后一行字符串開始建樹即可,最后遍歷輸出。這里為方便起見,將子母轉(zhuǎn)化成整數(shù)值存儲。 */ using namespace std; const int maxn=30; char str[30][30];struct node{int l,r; //左兒子的值、右兒子的值。若值為-1,表示不存在左/右兒子。 }node[maxn];void dfs(int u,int v){if(v<u){//當(dāng)u沒有左兒子時,v賦值給u的左兒子,否則遞歸u的左兒子if(node[u].l==-1){node[u].l=v;return;}else{dfs(node[u].l,v);}}else{//當(dāng)u沒有右兒子時,v賦值給u的右兒子,否則遞歸u的右兒子if(node[u].r==-1){node[u].r=v;return;}else{dfs(node[u].r,v);}} } void dlr_print(int u){if(node[u].l==-1&&node[u].r==-1){printf("%c",u+'A');return;}printf("%c",u+'A');if(node[u].l!=-1)dlr_print(node[u].l);if(node[u].r!=-1)dlr_print(node[u].r); } int main() {int m,u,v;while(scanf("%s",str[0])!=EOF){for(int i=0;i<maxn;i++){node[i].l=node[i].r=-1;}m=1;while(1){scanf("%s",str[m]);if(str[m][0]=='*' || str[m][0]=='$')break;m++;}int rootval=str[m-1][0]-'A'; //根節(jié)點的值。for(int i=m-2;i>=0;i--){for(int j=0;str[i][j]!='\0';j++){v=str[i][j]-'A';dfs(rootval,v);}}//前序遍歷輸出 dlr_print(rootval);printf("\n");}return 0; }?
轉(zhuǎn)載于:https://www.cnblogs.com/chenxiwenruo/p/3349627.html
總結(jié)
以上是生活随笔為你收集整理的POJ 1577 Falling Leaves (子母二叉树,给出叶子节点的删除序列,求前序遍历)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Web服务的体系架构
- 下一篇: FAX modem和传真协议简介