1. 程式人生 > >先序中序建立二叉樹 Java實現

先序中序建立二叉樹 Java實現

package fenshujs;


import java.util.Scanner;


public class bishi {
private static class Node
{
public char s;
public Node left = null;
public Node right = null;
}
public static Node CreateTree(char[] pre,char[] in,int preleft,int preright,int inleft,int inright)
{

Node node = new Node();
node.s = pre[preleft];
if(preleft==preright)
return node;
int inroot = 0,flag = -1;
for(int i = inleft;i<=inright;i++)
{
if(in[i] == node.s)
{
inroot = i;
flag = 0;
break;
}

}
        if(-1 == flag)
        {
        return null;
        }
//inroot = pre.length - inroot - 1;
node.left = CreateTree(pre,in,preleft+1,preleft+(inroot-inleft),inleft,inroot-1);
node.right = CreateTree(pre,in,preleft+(inroot-inleft)+1 ,preright,inroot+1 ,preright);
return node;
}
public static void ShowTree(Node node)
{
if(node == null)
return;
System.out.print("[");
ShowTree(node.left);
System.out.print(node.s);
ShowTree(node.right);
System.out.print("]");
}
public static void main(String[] args){
   
Scanner sc = new Scanner(System.in);
char[] pre = sc.nextLine().toCharArray();
char[] in = sc.nextLine().toCharArray();
Node node = CreateTree(pre,in,0,pre.length-1,0,in.length-1);
ShowTree(node);



}


}

相關推薦

建立 Java實現

package fenshujs; import java.util.Scanner; public class bishi {private static class Node{public char s;public Node left = null;public No

為資料, 或者後為根, 建立

#include<iostream> using namespace std; struct Tree{ int v; Tree *left, *right; }; Tree *create_node(int v){ Tree *node = new Tree; node

根據遍歷和遍歷建立(程式碼)

先宣告一個結構體:二叉樹的三個元素,資料域,左子樹,右子樹。 typedef char ElemType; typedef struct Node { ElemType data; struct Node *lchild,*rchild; }BitTree; 宣告函式:返回

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

Given preorder and inorder traversal of a tree, construct the binary tree. Note:You may assume that duplicates do not exist in the tree. 這道題要求用先序和中序遍

根據遍歷和遍歷建立

演算法思想 先序遍歷的順序是根左右,中序遍歷的順序是左根右。根據這一特性,先序遍歷的第一個元素肯定是根節點。所以我們只要在中序遍歷中找到該根節點的值,根節點以左就是它的左子樹,根節點以右就是它的右子樹,然後就可以遞迴的方式建立二叉樹 假設現在有一顆二叉樹如下

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

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

[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. 這道題要求從中

擴充套件序列建立(後擴充套件序列建立

題目:設計並驗證如下演算法:按後序序列建立二叉樹的二叉連結串列結構,求其單分支結點數目,雙分支結點數目,並交換該二叉樹。後序序列建立二叉樹需要藉助棧,棧的定義如下stack.h#include<stdio.h> #include<stdlib.h> #

LeetCode 106. Construct Binary Tree from Inorder and Postorder Traversal 由和後遍歷建立 C++

範圍 leetcode lee bin 一個 truct span class div Given inorder and postorder traversal of a tree, construct the binary tree. Note:You may ass

輸入某的前遍歷和遍歷的結果,請重建出該(java實現並測試)

假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹並返回。 package ssp; class TreeNode { int val; TreeNod

線索Java實現

/** * 線索樹結點類 * @author liangxiamoyi * */ public class ThreadNode { /** * 1標識左節點為前驅結點,0標識左節點為左子節點 */ protected int lThread; /**

在資料結構建立時候void CreateBiTree(BiTree &T);傳引數為什麼不能用指標而要用引用或指標的指標

記得以前我們剛上資料結構,建立二叉樹的時候,void CreateBiTree(BiTree &T);引數傳遞的是一個指向結構體指標的引用,有一個人問過老師,他說要改變值必須要用引用,我感覺他這裡根本就沒跟我們講清楚,為什麼要用指標的引用呢? 後來我問了別人,自己想了一下,在C語言中,可

反轉----java實現

實現二叉樹的反轉 示例: 原二叉樹: 4 / \ 2 7 / \ / \ 1 3 6 9 反轉後的二叉樹: 4 / \ 7 2 / \ / \ 9 6 3 1 程式碼實現:(遞迴)

劍指offer----從上到下列印----java實現

題目:從上往下打印出二叉樹的每個節點,同層節點從左至右列印。 思路:其實就是二叉樹的層次遍歷問題,藉助於佇列來實現對二叉樹的層次遍歷 程式碼: import java.util.ArrayList;

劍指Offer面試題59:對稱 Java實現

/************************************************************** * Copyright (c) 2016, * All rights reserved. * 版 本 號:v1.0

對稱的 java實現

題目描述: 請實現一個函式,用來判斷一棵二叉樹是不是對稱的,如果一棵二叉樹和他的映象是一樣的,那麼它是對稱的; 解題思路:首先 理解映象的概念,進行就是一棵二叉樹左右節點反轉過後形成的二叉樹和原來的二叉樹是一樣的。這道題目中判斷條件是使用和元二叉樹的映象相同,那麼最low的

劍指Offer面試題61:按之子型列印 Java實現

/************************************************************** * Copyright (c) 2016, * All rights reserved. * 版 本 號:v1.0

遍歷和遍歷序列建立——

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

已知|後建立及三種方式遍歷

const int maxv= 10000+10; int n; int in_order[maxv],post_order[maxv],pre_order[maxv]; int lch[maxv],rch[maxv]; //左右子節點 int build1(int L1,

已知遍歷結果和(或後結果),還原建立

主函式 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(