`

java-从先序遍历和中序遍历重建二叉树

 
阅读更多

public class BuildTreePreOrderInOrder {

	/**
	 * Build Binary Tree from PreOrder and InOrder
	 *  _______7______
       /              \
    __10__          ___2
   /      \        /
   4       3      _8
            \    /
             1  11
             
	 */
	public static void main(String[] args) {
		BuildTreePreOrderInOrder build=new BuildTreePreOrderInOrder();
		int[] preOrder = {7,10,4,3,1,2,8,11};
		int[] inOrder = {4,10,3,1,7,11,8,2};

		Node root=build.buildTreePreOrderInOrder(preOrder,0,preOrder.length-1,inOrder,0,preOrder.length-1);
		build.preOrder(root);
		System.out.println();
		build.inOrder(root);
	}

	public Node buildTreePreOrderInOrder(int[] preOrder,int begin1,int end1,int[] inOrder,int begin2,int end2){
		if(begin1>end1||begin2>end2){
			return null;
		}
		int rootData=preOrder[begin1];
		Node head=new Node(rootData);
		int divider=findIndexInArray(inOrder,rootData,begin2,end2);
		int offSet=divider-begin2-1;
		Node left=buildTreePreOrderInOrder(preOrder,begin1+1,begin1+1+offSet,inOrder,begin2,begin2+offSet);
		Node right=buildTreePreOrderInOrder(preOrder,begin1+offSet+2,end1,inOrder,divider+1,end2);
		head.left=left;
		head.right=right;
		return head;
	}
	
	public int findIndexInArray(int[] a,int x,int begin,int end){
		for(int i=begin;i<=end;i++){
			if(a[i]==x)return i;
		}
		return -1;
	}
	public void preOrder(Node n){
		if(n!=null){
			System.out.print(n.val+",");
			preOrder(n.left);
			preOrder(n.right);
		}
	}
	public void inOrder(Node n){
		if(n!=null){
			inOrder(n.left);
			System.out.print(n.val+",");
			inOrder(n.right);
		}
	}
	
	class Node{
		Node left;
		Node right;
		int val;

	public Node(int val){
		this.val=val;
	}
		public Node getLeft(){
			return left;
		}

	public Node getRight(){
			return right;
		}

	public int getVal(){
			return val;
		}


	}
}


3
0
分享到:
评论
1 楼 wpf523 2012-08-17  
二叉树  先序 建立

相关推荐

    根据二叉树前序遍历和中序遍历的结果输出后序遍历(java)

    在没有实际的二叉树结构时,我们可以通过前序和中序遍历的结果重建二叉树,这是因为这两组遍历结果提供了足够的信息来确定每个节点的位置。具体步骤如下: 1. **构建辅助数据结构**:首先,我们需要根据中序遍历的...

    二叉树算法

    遍历分为三种主要类型:先序遍历、中序遍历和后序遍历。这些遍历方法将非线性的二叉树结构转化为线性序列,使得我们能够按照特定的顺序访问所有节点。 1. 先序遍历(DLR): - 访问根节点 - 先序遍历左子树 - ...

    数据结构 二叉树所有代码

    - 动态构建:例如,从序列化数据(如JSON)重建二叉树。 2. **二叉树的遍历**: - 先序遍历(根-左-右):访问根节点,然后递归地遍历左子树和右子树。 - 中序遍历(左-根-右):先遍历左子树,然后访问根节点,...

    2级JAVA考试题和答案4.pdf

    3. 二叉树遍历:根据给定的先序遍历和中序遍历,可以重建二叉树。先序遍历中第一个元素是根节点,中序遍历中根节点左边的元素是左子树,右边的是右子树。由此可知,根节点的右子树的根是C。 4. 二分查找:在有序表...

    2级JAVA考试题和答案4借鉴.pdf

    3. 二叉树遍历:根据先序遍历(ABDFHCEGI)和中序遍历(BFHDAEIGC)可以重建二叉树。从中序遍历可以看出,B是左子树的根,F是右子树的根;从先序遍历可知,A是根节点,其右子树的根是E。 4. 二分查找:对于有序表,...

    数据结构与算法(JAVA语言版)

    - **树与森林的遍历**:介绍树和森林的遍历方法,包括先序遍历、中序遍历、后序遍历等。 - **由遍历序列还原树结构**:展示如何根据遍历序列重建树结构。 - **Huffman树** - **二叉编码树**:解释二叉编码树的...

    《剑指Offer》题目及代码.pdf

    6. 由前序和中序遍历重建二叉树:考察树的遍历知识,给定一棵树的前序和中序遍历结果,可以唯一确定这棵树。 7. 用两个栈实现队列:这是一种利用栈的特性来模拟队列操作的技巧,主要考察数据结构之间的转换和应用。...

    java算法与数据结构

    - 树和森林的遍历通常包括先序遍历、中序遍历和后序遍历。 **6.4.4 由遍历序列还原树结构** - 通过遍历序列可以重建原始的树结构。 ##### 6.5 Huffman树 **6.5.1 二叉编码树** - **二叉编码树**:每个叶子节点...

    数据结构与算法(Java版)

    - **树与森林的遍历:** 包括先序遍历、中序遍历、后序遍历等。 - **由遍历序列还原树结构:** 根据给定的遍历序列重建原来的树结构。 5. **Huffman树:** - **二叉编码树:** 一种特殊的二叉树,用于编码。 - ...

    2021年京东财务校招笔试题答案.docx

    8. **二叉树遍历**:根据先序和中序遍历,可以重建二叉树。先序遍历EFHIGJK,中序遍历HFIEJKG,可以得出根节点为I,其右孩子为J。 9. **逻辑推理游戏**:根据对话,A首先不知道,说明A的数字可能比B大也可能比B小;...

    java面试题及答案-非常全面(包括基础、网络、数据结构、算法及IT大厂面经)

    - **集合框架**:Java中的集合框架主要分为两种类型:`List` 和 `Set`。 - **List**:有序集合,可以包含重复元素。主要实现有`ArrayList`(基于数组)、`LinkedList`(基于双向链表)。 - **Set**:不允许重复...

    数据结构与算法(JAVA语言版)(中文版)

    介绍了二叉树的三种主要遍历方法:前序遍历、中序遍历、后序遍历。 **6.3.3 二叉树的查找** 讨论了如何在二叉树中查找指定节点,包括递归与非递归方法。 **6.3.4 二叉树的删除** 讲解了如何删除二叉树中的节点,...

    阿里巴巴2017实习生笔试题及答案(二).pdf

    10. 二叉树后序遍历:根据先序和中序遍历可以重建二叉树,后序遍历为C、E、D、B、I、H、J、G、F、A。 11. 进栈出栈序列:ACBD是错误的,因为C在A之后进栈,但在A之前出栈。 12. 结构体大小:考虑到对齐和#pragma ...

Global site tag (gtag.js) - Google Analytics