标题:Java实现给你一个数组,生成一个对应的二叉树
测试用例:
用的是层次遍历的思想:
层次遍历,一种不带返回值的,一种带返回值的【比前一种多了些思考】
层次遍历的代码:
//层次遍历
public void levelOrder(TreeNode root){
// Deque<TreeNode> s = new LinkedList<>();
Queue<TreeNode> q = new LinkedList<>();
q.offer(root);
while(!q.isEmpty()){
TreeNode p = q.poll();
System.out.print(p.val + " ");
if(p.left != null){
q.offer(p.left);
}
if(p.right != null){
q.offer(p.right);
}
}
}
public List<List<Integer>> levelOrder02(TreeNode root) {
List<List<Integer>> ret = new ArrayList<>();
if(root == null){
return ret;
}
Queue<TreeNode> q = new LinkedList<>();
q.offer(root);
TreeNode p = null;
List<Integer> list = null;
while(!q.isEmpty()){
int len = q.size();
list = new ArrayList<>();
for(int i = 0;i < len;i++){ //q.size(),此处会不断的改变,所以细节
p = q.poll();
System.out.print(p.val + " ");
list.add(p.val);
if(p.left != null){
q.offer(p.left);
}
if(p.right != null){
q.offer(p.right);
}
}
ret.add(list);
}
return ret;
}
完整代码如下:
public TreeNode generateTree(Integer[] nums){
if(nums == null || nums.length == 0){
return null;
}
Queue<TreeNode> q = new LinkedList<>();
TreeNode root = new TreeNode(nums[0]);
q.offer(root);
int k = 1;
while(k < nums.length){
int size = q.size();
for(int i = 0;i < size;i++){
TreeNode p = q.poll();
if(nums[k] != null){
TreeNode node = new TreeNode(nums[k]);
p.left = node;
q.offer(node);
}else{
p.left = null;
}
k++;
if(nums[k] != null){
TreeNode node = new TreeNode(nums[k]);
p.right = node;
q.offer(node);
}else{
p.right = null;
}
k++;
}
}
return root;
}