码迷,mamicode.com
首页 > 其他好文 > 详细

构造二叉树

时间:2016-07-05 18:40:22      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:

  二叉树是一种特殊的树形结构,每个节点最多有两个子节点,每个两个节点有左右之分,次序不能颠倒。一般使用递归来定义二叉树,因此与二叉树相关的问题都可以通过递归来解决。接下来介绍根据已知的二叉树结构,构造二叉树的方法。首先给出两个二叉树的结构,如下图所示:

技术分享

 

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 }
View Code

3)结果如下所示:

技术分享   技术分享

构造二叉树

标签:

原文地址:http://www.cnblogs.com/lz3018/p/5644364.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!