创建层次二叉树

来源:互联网 发布:淘宝信用贷款在哪里查 编辑:程序博客网 时间:2024/06/05 01:52

1、层经尝试着用递归实现二叉树的层次创建,但是失败了。如下语言所示,分析可能还是return root上面的两句中,执行完第一句之后,i发生了变化,但还不是太明白:

public class ErChaShu {public TreeNode root;//public int counter;public ErChaShu(){root = null;}public void preOrder(TreeNode node){          if(node != null){              System.out.println(node.val);              preOrder(node.left);              preOrder(node.right);          }      }  public TreeNode createTree(int[] ints,int i){ if(ints.length==0 || i>=ints.length){return null;}else{System.out.println(i);TreeNode root = new TreeNode(ints[i]);root.left = createTree(ints,++i);root.right= createTree(ints,++i);return root;}}}
后来还是参考了一下网上的程序,找了一下规律,才成功:

public class MyCengBuildTree {private TreeNode root;public TreeNode getTree(){return root;}public void createTree(int[] ints){TreeNode[] treeNodes = new TreeNode[ints.length];int i = 0;for(int intE:ints){treeNodes[i++] = new TreeNode(intE);}for(int parentIndex = 0; parentIndex < ints.length/2-1;parentIndex++){treeNodes[parentIndex].left= treeNodes[(parentIndex+1)*2-1];treeNodes[parentIndex].right= treeNodes[(parentIndex+1)*2];}if(ints.length%2==0){treeNodes[ints.length/2-1].left= treeNodes[ints.length-1];}else{treeNodes[ints.length/2-1].left= treeNodes[ints.length-2];treeNodes[ints.length/2-1].right= treeNodes[ints.length-1];}root = treeNodes[0];}public void preOrder(TreeNode root){if(root == null){return;}preOrder(root.left);System.out.println(root.val);preOrder(root.right);}}

如上所示。

0 0
原创粉丝点击