1. 程式人生 > >由中序和後序建立二叉樹,並前序輸出

由中序和後序建立二叉樹,並前序輸出

輸入用例:

BAC

BCA

XDEFAG

XEDGAF

輸出用例:

ABC

FDXEAG

思路與前面那道由前序中序輸出後序思路一樣,前面有詳細的解答

 ///
 /// @file    test.cc
 /// @author  miaobeihai([email protected])
 /// @date    2017-03-05 16:31:36
 ///
#include<stdio.h>
#include<string.h>
int loc=0;
char str1[100],str2[100];
struct Node{
	Node *rchild;
	Node *lchild;
	int data;
}Tree[50];
Node *create()
{
	Tree[loc].rchild=Tree[loc].lchild=NULL;
	return &Tree[loc++];
}

void preOrder(Node *T)
{
	if(T){
		printf("%c",T->data);
		if(T->lchild!=NULL)
	    	preOrder(T->lchild);
		if(T->rchild!=NULL)
			preOrder(T->rchild);
		//printf("%c",T->data);
	}
}
Node *build(int s1,int e1,int s2,int e2)
{
	int idx,i;
	Node *T=create();
	T->data=str2[e2];
	for(i=s1;i<=e1;i++)
	{
		if(str1[i]==str2[e2]){
			idx=i;
			break;
		}
	}
	if(idx!=s1)
	{
		T->lchild=build(s1,idx-1,s2,s2+(idx-s1-1));
	}
	if(idx!=e1)
	{
		T->rchild=build(idx+1,e1,s2+(idx-s1),e2-1);
	}
	return T;
}
int main()
{
	while(scanf("%s",str1)!=EOF)
	{
		scanf("%s",str2);
		int len1=strlen(str1);
		int len2=strlen(str2);
	    Node *T=build(0,len1-1,0,len2-1);
		preOrder(T);
		printf("\n");
	}
	return 0;
}


相關推薦

建立輸出

輸入用例: BAC BCA XDEFAG XEDGAF 輸出用例: ABC FDXEAG 思路與前面那道由前序中序輸出後序思路一樣,前面有詳細的解答 /// /// @file test.c

轉載-後續序列建立

         已知某二叉樹具有n(n>0)個不同的節點,其中序序列是a0a1…an-1,後序序列是b0b1…bn-1。          因為在後序遍歷過程中,先遍歷左子樹,再遍歷右子樹,最後訪問根節點。所以,bn-1必定是二叉樹的根節點,而且bn-1也必定在中序序列中出現。也就是說在中序序列中

java先根根遍歷序列建立標明空子建立有完全順序儲存結構建立鏈式儲存結構

    //由先根和中根遍歷建立二叉樹 public class bitree{     public bitree(String preorder,String inorder,int preindex,int in

遍歷遍歷序列建立——

Description 按先序順序和中序順序輸入二叉樹的2個遍歷序列,採用二叉連結串列建立該二叉樹並用後序遍歷順序輸出該二叉樹的後序遍歷序列。 Input 輸入資料有多組,對於每組測試資料 第一行輸入二叉樹的先序序列,第二行為中序序列。 Output 對於每組測試資料輸出該二叉樹

建立一棵用連結串列方式儲存的對其進行遍歷(先列印輸出遍歷結果

題目如下 程式碼如下 #include<stdio.h> #include<stdlib.h> #include<malloc.h> typedef struct Node//結構體 {

已知兩個序列建立也有)

本文主要講二叉樹的建樹,具體的說就是,題目給出你二叉樹的前序和中序,你來建樹,還有一個題目是給出中序和後序來建樹 第一題:A binary tree is a finite set of vertices that is either empty or consists

建立實現的先遍歷、遍歷的非遞迴演算法

先序遍歷:若二叉樹為空,則空操作;否則訪問根節點;先序遍歷左子樹;先序遍歷右子樹。 中序遍歷:若二叉樹為空,則空操作;否則中序遍歷左子樹;訪問根節點;中序遍歷右子樹。 後序遍歷:若二叉樹為空,則空操作;否則後序遍歷左子樹;後序遍歷右子樹;訪問根節點。

系列——根據構建

1、根據前序和中序構建二叉樹 思路:在二叉樹的前序遍歷序列中,第一個數字總是樹的根節點的值。但在中序遍歷序列中,根節點的值在序列的中間,左子樹的節點的值位於根節點的值得左邊,而右子樹的節點的值位於根節

——判斷兩棵是否相等(先遍歷序列建立

需求: 利用先序遍歷序列和中序遍歷序列來建立兩棵二叉樹,並判斷是否相等 需要先將建立二叉樹 建立的方法是將該二叉樹的先序的序列和中序的序列分別儲存到Pre陣列和Mid陣列中,它們的儲存順序如下: 判斷兩棵樹是否相等 採用遞迴的方法,用先序,中序

實現(包括遍歷演算法)

以前沒有記筆記的習慣,結果發現曾經實現過的東西居然都忘了,現在又需要花時間去看,去寫,雖然又有所收穫,但是畢竟在走重複的路。 從今天起,開始打路標,為了以後少走回頭路:) 還請高手多指點,不勝感激! 用Java語言實現二叉樹: 1、首先定義一個二叉樹節點類:實現 1)向某個

連結串列的方式建立一棵以非遞迴演算法輸出;計算的繁茂度判斷是否為完全

以二叉連結串列的方式存二叉樹,輸入時要以先序方式輸入,其中,空子樹用#表示。 二叉樹的繁茂度定義為其高度乘其每層結點最大值。演算法為先用遞迴演算法求二叉樹高度:其高度為左右子樹最大值加1,所以用先序遍歷,定義ld與rd分別為左右子樹高度,最後返回其較大值加1即可。二叉樹寬度

的學習——(遞迴構建、遞迴非遞迴遍歷、根據序列、序列構建

前言 最近兩個星期一直都在斷斷續續的學習二叉樹的資料結構,昨晚突然有點融匯貫通的感覺,這裡記錄一下吧 題目要求 給定前序序列,abc##de#g##f###,構建二叉樹,並且用遞迴和非遞迴兩種方法去做前序,中序和後序遍歷 二叉樹的資料結構 #define STACKSI

重建(根據遍歷結果)

public TreeNode reConstructBinaryTree(int [] pre,int [] in) {         return build(pre,0,pre.length-1,in,0,in.length-1);     }     public TreeNode build(in

C語言根據遍歷後續遍歷還原輸出的高度

7-23 還原二叉樹 (25 point(s)) 給定一棵二叉樹的先序遍歷序列和中序遍歷序列,要求計算該二叉樹的高度。 輸入格式: 輸入首先給出正整數N(≤50),為樹中結點總數。下面兩行先後給出先序和中序遍歷序列,均是長度為N的不包含重複英文字母(區別大小寫)的字串

建立遞迴輸出

#include<iostream> #include<cstdio> #include<cstdlib> using namespace std; typedef char ElementType; typedef str

遞迴 後續遍歷【java簡單】

本文最早發表在個人部落格 http://www.xdx97.com/#/single?bid=ead7cb23-ecfa-5108-7c5b-37f8d8696cc2  胡扯:第一次接觸 前中後 遍歷,應該是在上資料結構,玩手機擡頭偶然聽說的。很長一段時間我去記它的規律又因

線索原理及線索化(Java版)

轉載原文地址:https://blog.csdn.net/UncleMing5371/article/details/54176252一、線索二叉樹原理      前面介紹二叉樹原理及特殊二叉樹文章中提到,二叉樹可以使用兩種儲存結構:順序儲存和二叉連結串列。在使用二叉連結串列

建立按層次遍歷分層次換行輸出

測試輸入:123##4##5## 輸出:1             2 5             3 4 #include<iostream> #include<vector>

構建帶父結點的輸出所有結點到根結點的位置

在構建好二叉樹後,需要通過一次遍歷來給每個結點的parent賦值,關鍵程式碼如下: void triBtee(BTNode *p,BTNode *q)//給各個結點的parent賦值 { if(p == nullptr) return; p->parent =

[LeetCode] Construct Binary Tree from Inorder and Postorder Traversal 遍歷建立

Given inorder and postorder traversal of a tree, construct the binary tree. Note: You may assume that duplicates do not exist in the tree. 這道題要求從中