如果同時知道二叉樹的先序序列和中序序列,或者同時知道二叉樹的後序序列和中序序列,就能確定這顆二叉樹的形狀。
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...