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

2021-09-01 17:06:22 字數 3237 閱讀 6405

輸入二叉樹的先序遍歷序列和中序遍歷序列,輸出該二叉樹的後序遍歷序列。(非建二叉樹版本)

#include#includeusing namespace std;

string preord, inord;

void rebuild (int preleft, int preright, int inleft, int inright)

} leftsize = root - inleft;

rightsize = inright - root;

if(leftsize > 0)

if(rightsize > 0)

cout << inord[root]; }}

int main()

return 0;

}

已知一棵二叉樹的中序遍歷和後序遍歷,求二叉樹的先序遍歷

#include#include#includeusing namespace std;

string midord, inord;

void rebuild(int midleft, int midright, int inleft, int inright)

}leftsize = root - midleft;

rightsize = midright - root;

cout << midord[root];

if(leftsize > 0)

if(rightsize > 0)

}}int main()

return 0;

}

至於已知前序遍歷序列和後序遍歷序列,求中序遍歷序列,存在多種情況。

建立二叉樹版本

#include#include#include #include #include using namespace std;

#pragma warning(disable : 4996)

#define max 100

typedef struct binode

binode, *bitree;

int sum;

void createbinarytreetopre(bitree &tree, char *inorder, char *postorder, int length)

tree = new binode;

tree->data = *(postorder + length - 1);

tree->left = null;

tree->right = null;

//cout << tree->data;

int rootindex;

for(rootindex = 0; rootindex < length; rootindex++) }

createbinarytreetopre(tree->left, inorder, postorder, rootindex);

createbinarytreetopre(tree->right, inorder + rootindex + 1, postorder + rootindex, length - rootindex - 1);

}void createbinarytreetopost(bitree &tree, char *preorder, char *inorder, int length)

tree = new binode;

tree->data = *preorder;

tree->left = null;

tree->right = null;

int rootindex;

for(rootindex = 0; rootindex < length; rootindex++) }

createbinarytreetopost(tree->left, preorder + 1, inorder, rootindex);

createbinarytreetopost(tree->right, preorder + rootindex + 1, preorder + rootindex + 1, length - rootindex - 1);

//cout << tree->data;

}void preorder(bitree t)//前序遍歷

}void inorder(bitree t)//中序遍歷

}void postorder(bitree t)//後序遍歷

}void levorder(bitree t)//層次遍歷

if(p->right != null)

} }}

int size(bitree t)//計算二叉樹節點數

size(t->left);

size(t->right);

} return sum;

}int deep(bitree t)//計算二叉樹深度

int scan()

int main(void)

; char preorder[max] = ;

char postorder[max] = ;

while (!quit)

{ switch(scan())

{ case 1 : cin >> preorder >> inorder; createbinarytreetopost(tree, preorder, inorder, strlen(preorder)); break;

case 2 : cin >> inorder >> postorder; createbinarytreetopre(tree, inorder, postorder, strlen(inorder));break;

case 3 : cout << "前序遍歷結果為:" << endl; preorder(tree); cout << endl << endl; break;

case 4 : cout << "中序遍歷結果為:" << endl; inorder(tree); cout << endl << endl; break;

case 5 : cout << "後序遍歷結果為:" << endl; postorder(tree); cout << endl << endl; break;

case 6 : cout << "層次遍歷結果為:" << endl; levorder(tree); cout << endl << endl; break;

case 7 : cout << "二叉樹葉節點個數為:" << size(tree)<

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

從根部 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 後序遍...

二叉樹先序遍歷,中序遍歷,後序遍歷,層次遍歷。

原理 如圖 先序遍歷結果為 abdhecfg 首先從根節點開始,然後左節點,左節點成為根節點,然後再左節點,然後右節點 如果左子樹遍歷完後就遍歷該根節點的右子樹 中序遍歷結果為 hdbeafcg 當左節點被讀取後,左節點被當作根節點 後序遍歷結果為 hdebfgca 注意每個節點的左右子樹必須遍歷完...