輸入二叉樹的先序遍歷序列和中序遍歷序列,輸出該二叉樹的後序遍歷序列。(非建二叉樹版本)
#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 注意每個節點的左右子樹必須遍歷完...