1. 程式人生 > >已知二叉樹的中序遍歷結果和(先序或後序結果),還原建立二叉樹

已知二叉樹的中序遍歷結果和(先序或後序結果),還原建立二叉樹

主函式

int main(int argc, char** argv){
	int n, m;
	cin>>n;
	for(int i=0;i<n;i++){
		cin>>m;
		v.push_back(m);
	}
	for(int i=0;i<n;i++){
		cin>>m;
		vv.push_back(m);
	}
	flag=(初始化); 
	struct TreeNode* B=BinaryTreeFromOrderings(0,n);
	return 0;
}
中序跟後序
int flag;	//flag初始化為序列元素的總個數n
vector<
int> v,vv; //向量v儲存後序序列,vv儲存中序序列 struct TreeNode { struct TreeNode* Left; struct TreeNode* Right; int Data; }; TreeNode* BinaryTreeFromOrderings(int left,int right) { if(right-left==0){ flag++; return NULL; } TreeNode* node=new TreeNode; node->Data=v[flag]; int rootIndex;
for(rootIndex=left;rootIndex<right;rootIndex++) if(v[flag]==vv[rootIndex]) break; flag--; node->Right=BinaryTreeFromOrderings(rootIndex+1,right); flag--; node->Left=BinaryTreeFromOrderings(left,rootIndex); return node; }

中序跟先序

int flag;	//flag初始化為0
vector<
int> v,vv; //向量v儲存先序序列,vv儲存中序序列 struct TreeNode { struct TreeNode* Left; struct TreeNode* Right; int Data; }; TreeNode* BinaryTreeFromOrderings(int left,int right) { if(right-left==0){ flag--; return NULL; } TreeNode* node=new TreeNode; node->Data=v[flag]; int rootIndex; for(rootIndex=left;rootIndex<right;rootIndex++) if(v[flag]==vv[rootIndex]) break; flag++; node->Left=BinaryTreeFromOrderings(left,rootIndex); flag++; node->Right=BinaryTreeFromOrderings(rootIndex+1,right); return node; }