給出前序和中序建樹:
node* build (int n, int* pre, int* in)
給出中序和後序建樹:
node* build (int n, int* in, int* pos)
uva-548 給你一棵樹的中序和後序遍歷,求從根到葉子組成的路徑中數字和最小的那條,輸出最小路徑的葉子。
思路:在重建完二叉樹後,dfs遍歷找到最小路徑和葉子
#include
#include
#include
#include
#include
using namespace std;
int in[10010],pos[10010];
int min1,ans;
struct tree
;tree *root;
tree* build(int n, int* in, int* pos)
void dfs(tree *tr,int sum)
sum=sum+tr->data;
if(tr->l==null&&tr->r==null)
}else
if(tr->r!=null)
}}int main()
ch = ' ';
for(int i=0;ch!='\n';i++)
min1=1000001;
root=build(n,in,pos);
dfs(root,0);
printf("%d\n",ans);
}return
0;}
杭電1710
根據前序遍歷和中序遍歷,輸出後序遍歷
#include
#include
#include
#include
using
namespace
std;
const
int n=1010;
int pre[n],in[n];
struct tree
;tree *root;
tree *creattree(int *pre,int *in,int n)
}return null;
}void printfpos(tree *rt)
else
}}int main()
for(int i=0;iscanf("%d",&in[i]);
}root=creattree(pre,in,n);
printfpos(root);
}return
0;}
二叉樹建樹 遍歷
首先需要乙個結構體,表示每乙個結點 typedef struct node btnode 然後就可以直接建樹了 示例是按前序遍歷 關於前序遍歷後面有解釋 建樹 void build btnode t t data data t lchild null t rchild null build t lc...
二叉樹建樹的過程
include using namespace std 二叉樹建樹的過程 struct tree tree creat tree root else return root tree build int ps,int is,int n tree t new tree t data preorder ...
二叉樹建樹的若干問題
問題1二叉樹有一種問題很經典,如果給出中序遍歷和前序遍歷的序列,如何建立乙個顆二叉樹數?實際上後續遍歷和前序遍歷是一樣的,可以替換掉前序遍歷的 那麼我們容易知道,前序遍歷序列的第乙個節點就是root,那麼我們在中序遍歷找出這個點,那麼在這個點的左邊就是左子樹的中序遍歷序列,右邊亦然,那麼前序遍歷在除...