1. 程式人生 > >二叉樹的遍歷 及前中序轉換成後序遍歷

二叉樹的遍歷 及前中序轉換成後序遍歷

給出一棵二叉樹的中序和前序遍歷,輸出它的後序遍歷。

Input:

     本題有多組資料,輸入處理到檔案結束。

    每組資料的第一行包括一個整數n,表示這棵二叉樹一共有n個節點。

    接下來的一行每行包括n個整數,表示這棵樹的中序遍歷。

    接下來的一行每行包括n個整數,表示這棵樹的前序遍歷。

    3<= n <= 100 

Output:

每組輸出包括一行,表示這棵樹的後序遍歷。

Sample Input:

7
4 2 5 1 6 3 7

1 2 4 5 3 6 7 

Sample Output:

4 5 2 6 7 3 1 

程式碼:

#include<iostream>
#include<stdio.h>
#include<queue>
#include<cstring>

using namespace std;

int Q[105];//存放前序遍歷 
int Z[105];//存放中序遍歷

struct TreeNode{  //樹節點 
	int data;
	TreeNode *l,*r;
};

TreeNode * Tranlate (int fro,int mid,int len){   //把前序和中序遍歷結果轉換為二叉樹 
	if(len == 0)return NULL;
	
	TreeNode *node = new TreeNode;
	node->data = Q[fro];
	int tlen = 0;	
	while(1){
		if(Z[mid+tlen] == Q[fro])break;
		++tlen;
	}
	node->l = Tranlate(fro+1,mid,tlen);
	node->r = Tranlate(fro+tlen+1,mid+tlen+1,len - tlen - 1);
	
	return node;
}
void BackP(TreeNode const *head){   //進行後序遍歷並輸出 
	if(head == NULL)return ;
	
	BackP(head->l);
	BackP(head->r);
	printf("%d ",head->data);//注意這裡的輸出格式,這裡最後一個數後也有空格。(賊坑) 
}

int main(){
	int N;
	while(scanf("%d",&N)!=EOF){
		for(int i=0 ; i<N ; i++)scanf("%d",&Z[i]);
		for(int i=0 ; i<N ; i++)scanf("%d",&Q[i]);
		TreeNode *head = Tranlate(0,0,7);
		BackP(head);
		printf("\n");
	}
	return 0;
}

相關推薦

的建立和層次

樹是N個結點的有限集合,N=0時稱為空樹,任意一顆非空樹滿足以下條件: 有且只有一個特定的稱為根的結點 當N>1時,其他結點可分為m個互不相交的悠閒集合,其中每個集合本身又是一個棵樹,並稱為根節點的子樹 樹的定義是遞迴的,是一種遞迴的資料結構,樹作為一

轉換

給出一棵二叉樹的中序和前序遍歷,輸出它的後序遍歷。 Input: 本題有多組資料,輸入處理到檔案結束。 每組資料的第一行包括一個整數n,表示這棵二叉樹一共有n個節點。

的建立

Problem Description 按照給定的擴充套件二叉樹前序遍歷序列建立相應的非空二叉樹,要求採用二叉連結串列進行儲存,並對其進行前序遍歷,輸出前序遍歷序列後請銷燬二叉連結串列以釋放記憶體。 Input 第一行為一個整數n,表示以下有n組資料,每組資料佔一行,為擴充套件二叉樹

基礎操作 ,,求高度,搜尋排序)Java實現 程式碼集合

首先,定義一個樹類Tree.java public class Tree { public TreeNode root; } 定義樹節點類TreeNode.java public class TreeNode { public TreeNode(int

的建立及其

1 //二叉樹儲存結構: 2 struct node 3 { 4 Int data; 5 node *lchild; 6 node *rchild; 7 }; 8 9 //二叉樹在建樹前根節點不存在: 10 Node *root = NULL; 11 12

C++的構建求深度,葉子數量,層次

include include include include using namespace std; struct Tree { char info; T

面試題:

在面試時,避免不了的會遇到一些資料結構的面試題,今天我們就來了解一下二叉樹的經典面試題: 已知二叉樹的前序遍歷順序為ABCDEGHF,中序遍歷順序為DBAGEHCF,求該二叉樹的後序遍歷。 還有: 已知二叉樹的中序遍歷順序為DBAGEHCF,後序遍歷順序為DBGHEFCA,求該二叉樹的前序遍歷。 類似

線索實例(創建,)--2018.5.15

ID 中序遍歷 char turn 先序 AD 線索 lib data 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 typedef enum 5 { 6 Link,

的深度,,節點個數,是否為空,查詢某一個節點,測試方式

package com.bjsxt.tree; import java.util.ArrayList; import java.util.Deque; import java.util.LinkedList; import java.util.Queue; /** * * @autho

資料結構實驗-C語言-二叉樹的建立,後序遍歷的遞迴演算法和非遞迴演算法,求葉子結點數目,求二叉樹深度,判斷二叉樹是否相似,求二叉樹左右子互換,二叉樹序遍歷的演算法,判斷二叉樹是否是完全二叉樹

1.實驗目的 熟練掌握二叉樹的二叉連結串列儲存結構的C語言實現。掌握二叉樹的基本操作-前序、中序、後序遍歷二叉樹的三種方法。瞭解非遞迴遍歷過程中“棧”的作用和狀態,而且能靈活運用遍歷演算法實現二叉樹的其它操作。 2.實驗內容 (1)二叉樹的二叉連結串列的建立 (2)二叉樹的前、中、後

python演算法與資料結構013--的實現按先的遞迴實現

二叉樹的深度優先遍歷: (可以用遞迴或者堆疊實現) 先序:根節點->左子樹->右子樹 中序: 左子樹->根節點->右子樹 後序:左子樹->右子樹->根節點 二叉樹按廣度優先遍歷:從上到下,從左到右遍歷按層次遍歷(利用佇列實現) cl

的建立

Problem Description 按照給定的擴充套件二叉樹前序遍歷序列建立相應的非空二叉樹,要求採用二叉連結串列進行儲存表示,並對其進行中序和後序遍歷,輸出中後序遍歷序列後請銷燬二叉連結串列以釋放記憶體。 Input 第一行為一個整數n,表示以下有n組資料,每組資料佔一行,為擴

非遞迴

import java.util.Stack; class Solution {     private static void doPre(ListNode root) { &n

的建立,以及層次

二叉樹的建立 對於二叉樹的建立,可能很多人不知道如何去初始化一個二叉樹,其實初始化二叉樹非常簡單,需要引入一個擴充套件二叉樹的概念 擴充套件二叉樹 擴充套件二叉樹:讓二叉樹的所有節點都具有左右孩子,沒有孩子的,我們手動將其填滿,例如#,即如下所示 擴充套

輕鬆理解Java的構建,層次,遞迴非遞迴實現

二叉樹的構建規則:左子樹上的值均不大於右子樹,所以在生成插入的時候,需要以下幾步判斷根節點是否為空,不為空,則直接根節點就是插入節點若根節點不為空,判斷值與根節點大小相比,若大於,則遞迴插入右子樹,節點變為根節點的右子樹,反之則插入左子樹。插入的時候,若是遞迴插入,需要傳入根

資料結構-(遞迴;棧實現變數;映象)

* *前序、後序、中序變數二叉樹(遞迴解法) *中序 棧實現 *深度遍歷 佇列實現 *應用:二叉樹映象(劍指offer) */ typedef struct BiTNode *BiTree;//結點指標 //前序遍歷 void preOrderTra

的建立、 (轉)

 // BTree.cpp : Defines the entry point for the console application./* 作者:成曉旭 時間:2001年7月2日(9:00:00-14:00:00) 內容:完成二叉樹的建立、前序遍歷、中序遍歷、後序遍歷 時間:2001年7月2日(14:0

的建立(先、後續、層次

資料結構學過有一段時間了,太長時間沒有寫程式碼,基本上都忘個差不多了,最近用到了,今天重新複習了一下,寫個二叉樹小彙總 注:我這裡節點是字元型別,所以如果節點要是儲存大於9的數字的值的話,需要將其改一下,部分功能程式碼也要隨之改變,但是隻要思想弄懂了,那麼無論改成什麼樣的

的建立遞歸

art 先序 popu dsm ostream != 方式 mat trac huangjing 二叉樹的的建立方式為前序 二叉樹有三種遍歷 前序遍歷(NLR) 中序遍歷(LNR) 興許遍歷(LRN) 非遞歸的算法明天補上 代碼為: #include<i

LeetCode:的非遞歸

== bin printf [0 -1 中序 present %d res 第一次動手寫二叉樹的,有點小激動,64行的if花了點時間,上傳leetcode一次點亮~~~ 1 /* inorder traversal binary tree */ 2 #include