//如何只有前序遍历(带空节点的)创建二叉树
/*
1.无法直接切割为左右子树序列
2.在创建树的过程中,会得到用掉了多少个节点
*/
//返回两个值,创建好树的根节点,用掉的个数,用一个类包起来
public class Solution9020{
private static class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) {
val = x;
}
}
//Build Tree Rturn Value
private static class BTRV{
private TreeNode root;
private int used;//用掉了多少个节点
}
BTRV buildTree(List<Integer> preorder){
if(preorder.size()==0){//574##18##4没有给全
BTRV returnValue=new BTRV();
returnValue.root=null;
returnVAlue.used=0;
return returnVAlue;
}
//找到根的值
int rootValue=preorder.get(0);
if(rootValue=='#'){
BTRV returnValue=new BTRV();
returnValue.root=null;
returnValue.used=1;
return returnValue;
}
//传给左子树去创建
BTRV leftReturn=buildTree5(preorder.subList(1,preorder.size()));//leftReturn.root 创建好的左子树的根 used是用掉的节点的个数
BTRV rightReturn=buildTree5(preorder.subList(1+leftReturn..used,preorder.size()));
TreeNode root=new TreeNode(rootValue);
root.left=leftReturn.root;
root.right=rightReturn.root;
//返回最终结果(BTRV类型)
BTRV returnValue=new BTRV();
returnValue.root=root;
returnValue.used=1+leftReturn.used+rightReturn.used;
return returnValue;
}
}
根据前序遍历构建二叉树
最新推荐文章于 2024-04-09 11:39:38 发布