二叉樹建樹

2021-08-04 09:44:10 字數 1370 閱讀 6978

給出前序和中序建樹:

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,那麼我們在中序遍歷找出這個點,那麼在這個點的左邊就是左子樹的中序遍歷序列,右邊亦然,那麼前序遍歷在除...