【发布时间】:2014-11-12 16:26:28
【问题描述】:
我已经可以在 java 中使用以下算法将数组转换为二叉树:
public class TreeNode {
public TreeNode left, right;
public int val;
public TreeNode(int val) {
this.val = val;
}
}
public TreeNode arrayToTree(Integer[] input){
TreeNode root = createTreeNode(input,1);
return root;
}
private TreeNode createTreeNode(Integer[] input, int index){
if(index<=input.length){
Integer value = input[index-1];
if(value!=null){
TreeNode t = new TreeNode(value);
t.left = createTreeNode(input, index*2);
t.right = createTreeNode(input, index*2+1);
return t;
}
}
return null;
}
当输入为 {1,null,2,null,null,3} 时,我得到以下树:
1
\
2
/
3
但是我认为输入 {1,null,2,3} 足够清晰,可以定义像上面这样的树。
有什么好主意可以避免输入数组中定义的冗余 nulls?
【问题讨论】:
-
一定要用递归吗?
-
空值不是冗余的。如果你不指定树的形状和缺失的节点,没有程序可以猜到它们。
-
@Herokiller,即使没有递归也欢迎任何更好的想法。
-
@user1146450 然后你可以使用队列添加树节点
-
@YvesDaoust 当父级为
NULL时它们是多余的。有一些编码使用了这个事实。
标签: java algorithm binary-tree