NC60 判断一棵二叉树是否为搜索二叉树和完全二叉树
描述
给定一棵二叉树,已知其中的节点没有重复值,请判断该二叉树是否为搜索二叉树和完全二叉树。
示例1
输入:
{2,1,3}
复制
返回值:
[true,true]
import java.util.*;
/*
* public class TreeNode {
* int val = 0;
* TreeNode left = null;
* TreeNode right = null;
* }
*/
public class Solution {
/**
*
* @param root TreeNode类 the root
* @return bool布尔型一维数组
*/
public boolean[] judgeIt (TreeNode root) {
// write code here
boolean[] res = new boolean[2];
res[0] = isBST(root);
res[1] = isCBT(root);
return res ;
}
public boolean isBST(TreeNode root){
boolean r = BSThelper(root , Long.MIN_VALUE , Long.MAX_VALUE) ;
return r;
}
public boolean BSThelper(TreeNode root , long max , long min){
if(root == null){
return true;
}
if(root.val <= max || root.val > min){
return false ;
}
return BSThelper(root.left , max , Math.min(root.val , min)) && BSThelper(root.right , Math.max(max , root.val) , min);
}
public boolean isCBT(TreeNode root){
if(root == null){
return false ;
}
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.offer(root) ;
while(!queue.isEmpty()){
TreeNode node = queue.peek();
if(node.left != null && node.right != null){
queue.poll();
queue.offer(node.left);
queue.offer(node.right);
}
if(node.left == null && node.right != null){
return false ;
}
if((node.left != null && node.right == null) || (node.left == null && node.right == null)){
queue.poll();
while(!queue.isEmpty()){
node = queue.peek();
if(node.left == null && node.right == null){
queue.poll();
}else{
return false ;
}
}
}
}
return true ;
}
}
该博客提供了一个Java解决方案,用于检查给定的二叉树是否同时满足搜索二叉树(BST)和完全二叉树(CBT)的条件。它通过递归函数实现,分别对BST和CBT进行判断,确保每个节点的值在子树范围内,并检查CBT的每一层节点填充情况。
2782

被折叠的 条评论
为什么被折叠?



