由後序遍歷和中序遍歷構建二叉樹(C 語言)

2021-10-10 22:32:07 字數 2929 閱讀 1455

不要自卑,去提公升實力

網際網路行業誰技術牛誰是爹

如果文章可以帶給你能量,那是最好的事!請相信自己,加油o~

設計思路:

char* post為後序遍歷的順序

char* in為中序遍歷的順序

首先建立乙個指標p,用迴圈在in中找到根節點

left為左子樹個數=p-in(指標差值)

right為右子樹個數(n-left-1)

之後遞迴呼叫該函式構建左右子樹

注意:要想構建二叉樹,必須知道中序遍歷,這樣才可以知道根節點,進而確定左右子樹

有前序和後序不能夠構建二叉樹

**:

/**

*2023年11月27日,下午21:58

*/#include

using

namespace std;

class

node

node

(char ch, node* left, node* right)};

static

int i =0;

//#號法建立二叉樹

node*

createtree

(vector<

char

> arr,node* root)

else

}return root;

}//二叉樹的前序遍歷

void

preorder

(node* root)

cout << root-

>ch <<

" ";

preorder

(root-

>left)

;preorder

(root-

>right);}

//二叉樹的中序遍歷

void

midorder

(node* root)

midorder

(root-

>left)

; cout << root-

>ch <<

" ";

midorder

(root-

>right);}

//二叉樹的後序遍歷

void

postorder

(node* root)

postorder

(root-

>left)

;postorder

(root-

>right)

; cout << root-

>ch <<

" ";

}//計算二叉樹的高度

inttreedepth

(node* root)

else

}node*

buildtree1

(char

* pre,

char

* in,

int n)

node* root =

newnode()

; root-

>ch =

*pre;

char

* p;

for(p = in; p < in + n; p++)}

int left = p - in;

//左子樹個數

int right = n - left -1;

//右子樹個數

root-

>left =

buildtree1

(pre +

1, in, left)

; root-

>right =

buildtree1

(pre + left +

1, p +

1, right)

;return root;

}node*

buildtree2

(char

* post,

char

* in,

int n)

node* root =

newnode()

; root-

>ch =

*(post + n-1)

;char

* p;

for(p = in; p < in + n; p++)}

int left = p - in;

int right = n - left -1;

root-

>left =

buildtree2

(post,in, left)

; root-

>right =

buildtree2

(post + left , p +

1, right)

;return root;

}int

main()

;char mid=

;char post=

; node* root =

newnode()

; root =

buildtree2

(post, mid,6)

; cout <<

"前序遍歷:"

;preorder

(root)

; cout << endl;

cout <<

"中序遍歷:"

;midorder

(root)

; cout << endl;

cout <<

"後序遍歷:"

;postorder

(root)

; cout << endl;

}

二叉樹先序遍歷 中序遍歷 後序遍歷

輸入二叉樹的先序遍歷序列和中序遍歷序列,輸出該二叉樹的後序遍歷序列。非建二叉樹版本 include includeusing namespace std string preord,inord void rebuild int preleft,int preright,int inleft,int ...

二叉樹先序遍歷 後序遍歷 中序遍歷

從根部 a 開始,然後開始遍歷左子樹,直接找到 b 檢視 b 有沒有左子樹,有 d,再檢視 d 有沒有子樹,沒有,d 已經是葉子,所以第二個是 d。倒回去,取中 b,第三個數是 b。檢視 b 有沒有右子樹,有 e 檢視 e 有沒有子樹,有 g 左 h 右 所有後面三個數是 egh 先查左子樹,存在繼...

二叉樹先序遍歷 中序遍歷 後序遍歷

二叉樹先序遍歷 中序遍歷 後序遍歷 include include typedef struct bitnodebitnode,bitree void visit bitnode c 先序遍歷 void preorder bitree t 中序遍歷 void inorder bitree t 後序遍...