先序 中序 後序序列的二叉樹構造演算法

2021-08-19 01:14:18 字數 1491 閱讀 9771

如果同時知道二叉樹的先序序列和中序序列,或者同時知道二叉樹的後序序列和中序序列,就能確定這顆二叉樹的形狀。

2、應用

通過二叉樹的先序序列、中序序列或後序序列、中序序列,可構造出唯一的二叉樹結構。

3、實現

(1)二叉樹的型別定義

typedef char elemtype;

typedef struct btnode

btnode;

(2)利用先序序列和中序序列構造二叉樹

btnode* createbtbypreandin(elemtype* pre, elemtype* in, int n)

} b->left = createbtbypreandin(pre + 1, in, k);

b->right = createbtbypreandin(pre + 1 + k, in + 1 + k, n - k - 1);

return b;

}

(4)利用後序序列和中序序列構造二叉樹

btnode* createbtbypostandin(elemtype* post, elemtype* in, int n)

} b->left = createbtbypostandin(post, in, k);

b->right = createbtbypostandin(post + k, in + k + 1, n - k - 1);

return b;

}

4、測試

#include #include using namespace std;

typedef char elemtype;

typedef struct btnode

btnode;

void levelorder(btnode* root)

} cout << endl;

}btnode* createbtbypreandin(elemtype* pre, elemtype* in, int n)

} b->left = createbtbypreandin(pre + 1, in, k);

b->right = createbtbypreandin(pre + 1 + k, in + 1 + k, n - k - 1);

return b;

}btnode* createbtbypostandin(elemtype* post, elemtype* in, int n)

} b->left = createbtbypostandin(post, in, k);

b->right = createbtbypostandin(post + k, in + k + 1, n - k - 1);

return b;

}int main()

構造二叉樹 先序 中序 後序 中序

牛客網 給出一棵樹的前序遍歷和中序遍歷,請構造這顆二叉樹 注意 可以假設樹中不存在重複的節點 先遍歷的第乙個數是根節點,中序遍歷的根節點左邊是左子樹,右邊是右子樹。通過先序遍歷遍歷找到根結點,通過中序中根結點的位置可以將樹劃分成兩個子樹,然後遞迴的進行呼叫即可構造好二叉樹。definition fo...

二叉樹 先序序列 中序序列 後序序列

已知二叉樹的先序遍歷序列和中序遍歷序列,求後序遍歷序列。先遞迴構造二叉樹,然後遞迴得到後序序列。思路 先序序列的第乙個結點為要構造二叉樹的根結點,在中序序列中查詢二叉樹的根結點,則中序列根結點左邊為根結點的左子樹的中序序列,右邊為根結點的右子樹的中序序列。而先序序列根結點後面分別為它的左子樹和右子樹...

二叉樹 先序 中序 後序

同學整理的,順便傳上分享下 一,已知先序和中序 求後序 1 include2 include3 include4 using namespace std 5char s1 10 s2 10 ans 10 6 int o 0 7 void tree int n char s1 char s2 char...