使用层次遍历 采用递归的方式建立二叉树:-1表示空结点
package TreeNode;
public class TreeCreate {
public TreeNode root;
public TreeCreate(int [] array)
{
root=CreateTree(array,0);
}
public TreeNode CreateTree(int [] array,int index)//对二叉树采用层次遍历递归方式
{
if(index>=array.length || array[index]==-1 )
return null;
TreeNode node=new TreeNode(array[index]);
node.left=CreateTree(array,2*index+1);
node.right=CreateTree(array,2*(index+1));
return node;
}
public void preShow(TreeNode node) { // 先序遍历
if (node != null) {
System.out.print(node.val + " ");
preShow(node.left);
preShow(node.right);
}
}
public static void main(String[] args) {
int array[]={1,2,3,4,-1,5,6,7,8,-1,-1,9,10};
TreeCreate Tree=new TreeCreate(array);
Tree.preShow(Tree.root);
}
}
如果在这个过程中采用的是先序遍历递归的建立二叉树
public TreeNode root;
public TreeCreate(int [] array)
{
root=CreateTreePre(array);
}
int index=0;//index 作为一个全局变量,根结点右边子树值在数组中是存放最末尾
public TreeNode CreateTreePre(int [] array)
{
int val=array[index++];
if(val==-1)
return null;
else {
TreeNode node=new TreeNode(val);
node.left=CreateTreePre(array);
node.right=CreateTreePre(array);
return node;
}
}
public void preShow(TreeNode node) { // 先序遍历
if (node != null) {
System.out.print(node.val + " ");
preShow(node.left);
preShow(node.right);
}
}
public static void main(String[] args) {
int array1[]={1,2,-1,3,-1,-1,4,-1,-1};
TreeCreate Tree1=new TreeCreate(array1);
System.out.println("通过前序遍历得到二叉树");
Tree1.preShow(Tree1.root);
}
结果显示: 1 2 3 4
package com.offer;
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val)
{
this.val=val;
}
public TreeNode()
{
CreateBinaryTree();// 采用默认的
//preShow(this.root);
}
public TreeNode(int array[])
{
this.root=CreateBinaryTree(array);
}
public TreeNode root;
public void CreateBinaryTree()
{
int array[]={5,3,6,-1,-1,2,-1,-1,1,-1,-1};
this.root=CreateBinaryTree(array);
}
public TreeNode CreateBinaryTree(int array[])
{
/**第一种建立二叉树方式采用先序遍历建立二叉树**/
return CreateTreePre(array);
/**第二种方式采用层次遍历方式建立二叉树*/
//return CreteTreeLevel(array,0);
}
@SuppressWarnings("unused")
private TreeNode CreateTreeLevel(int[] array,int index) {
if(index>=array.length || array[index]==-1)
return null;
TreeNode node=new TreeNode(array[index]);
node.left=CreateTreeLevel(array,2*index+1);
node.right=CreateTreeLevel(array,2*(index+1));
return node;
}
private int index=0;
private TreeNode CreateTreePre(int array[])
{
int val=array[index++];
if(val==-1)
return null;
else
{
TreeNode node=new TreeNode(val);
node.left=CreateTreePre(array);
node.right=CreateTreePre(array);
return node;
}
}
public void preShow(TreeNode node) { // 先序遍历
if (node != null) {
System.out.print(node.val + " ");
preShow(node.left);
preShow(node.right);
}
}
public static void main(String[] args)
{
TreeNode r=new TreeNode();}
}