标签:
二叉树是一种特殊的树形结构,每个节点最多有两个子节点,每个两个节点有左右之分,次序不能颠倒。一般使用递归来定义二叉树,因此与二叉树相关的问题都可以通过递归来解决。接下来介绍根据已知的二叉树结构,构造二叉树的方法。首先给出两个二叉树的结构,如下图所示:
1)根据已有的二叉树结构,生成节点数组,依据节点数组构造二叉树时。约定输入的正数表示其节点编号,负数表示节点不存在。从根节点开始,构造其左子树,如果此树上还有左子树,继续操作,直至没有左子树,然后构造右子树。以A为例说明生成节点数组的过程,设节点数组为nodeArr。首先访问根节点1(nodeArr=[1]),有左子树且根节点为2(nodeArr=[1,2]),以2为根节点继续访问,仍然有左子树且根节点为4(nodeArr=[1,2,4]),继续访问,没有左子树(nodeArr=[1,2,4,-1]),也没有右子树(nodeArr=[1,2,4,-1,-1]),返回到上层,访问2的右子树,且右子树根节点为5(nodeArr=[1,2,4,-1,-1,5]),发现5没有左节点和右节点(nodeArr=[1,2,4,-1,-1,5,-1,-1]),依此类推,最终A的节点数组为nodeArr=[1,2,4,-1,-1,5,-1,-1,3,-1,6,-1,-1]。同理,设B的节点数组为nodeArr2,有nodeArr2=[1,2,4,-1,-1,5,9,-1,-1,-1,3,6,7,-1,8,-1,-1,-1,-1]。
2)根据节点数组,生成二叉树,代码如下:
1 public class traversal { 2 static int step=0; 3 public static void main(String[] args){ 4 int[] nodeArray=new int[]{1,2,4,-1,-1,5,-1,-1,3,-1,6,-1,-1}; 5 int[] nodeArray2=new int[]{1,2,4,-1,-1,5,9,-1,-1,-1,3,6,7,-1,8,-1,-1,-1,-1}; 6 Node root=new Node(); 7 root=createBinaryTree(root,nodeArray2); 8 System.out.println("end"); 9 } 10 public static Node createBinaryTree(Node root,int[] nodeArray ){ 11 int val=-1; 12 try { 13 val = nodeArray[step]; 14 step++; 15 } 16 catch (ArrayIndexOutOfBoundsException ex){ 17 System.out.println("(ArrayIndexOutOfBounds,check the nodeArray"); 18 } 19 if(val<0){ 20 System.out.println("leaf node"); 21 root=null; 22 return root; 23 } 24 root=new Node(val);///指向新对象 25 //step++; 26 root.leftNode=createBinaryTree(root.leftNode,nodeArray); 27 root.rightNode=createBinaryTree(root.rightNode,nodeArray); 28 return root; 29 } 30 } 31 class Node{ 32 public int value=-1; 33 public Node leftNode; 34 public Node rightNode; 35 public Node(int val){ 36 value=val; 37 } 38 public Node(){ 39 } 40 }
3)结果如下所示:
标签:
原文地址:http://www.cnblogs.com/lz3018/p/5644364.html