首先空的节点在数组中用#号表示。
思路:
1.把树从根左右的顺序从0开始标号。那么第i号节点的左孩子的标号是2*i+1,右孩子是2*i+2。
2.程序上实现标号:
即创建一个TreeList类型的List记作nodeList,
List<TreeNode> nodeList = new ArrayList<TreeNode>();
再把数组中的元素按顺序放进去:
for(int i = 0;i < arr.size();i++){
if((String)arr.get(i) != "#"){
nodeList.add(new TreeNode((String)arr.get(i)));}
else{
nodeList.add(null);
}
}
这样就能够按标号找到节点,接下来只需要把每个有孩子的节点连上其孩子即可,而孩子很容易通过标号找到在数组中找到。
剩下的就是一些细节问题,比如数组越界的处理,还有遍历到空节点要继续向下遍历到非空。直接贴代码了。
public static TreeNode createTree(List<String> arr){
List<TreeNode> nodeList = new ArrayList<TreeNode>();
if(arr == null){
return null;
}
else{
for(int i = 0;i < arr.size();i++){
if((String)arr.get(i) != "#"){
nodeList.add(new TreeNode((String)arr.get(i)));
}
else{
nodeList.add(null);
}
}
int i = 0;