import java.util.ArrayList;
import java.util.Arrays;
/**
* @author xienl
* @description 判断一棵二叉树是否为搜索二叉树和完全二叉树
* @date 2022/7/6
*/
public class Solution {
public static void main(String[] args) {
Solution solution = new Solution();
TreeNode treeNode = new TreeNode(3, new TreeNode(2, new TreeNode(1),new TreeNode(4)), new TreeNode(5));
//TreeNode treeNode = new TreeNode(3, new TreeNode(1), new TreeNode(7, new TreeNode(6), new TreeNode(8)));
System.out.println(Arrays.toString(solution.judgeIt(treeNode)));
}
public boolean[] judgeIt (TreeNode root) {
// write code here
boolean[] res = new boolean[2];
res[0] = isSerachTreeBST(root, Integer.MIN_VALUE, Integer.MAX_VALUE);
res[1] = isAllTreeBST(root);
return res;
}
private boolean isSerachTreeBST(TreeNode root, int left, int right){
if (root == null){
return true;
}
if ( root.val < left || root.val > right){
return false;
}
return isSerachTreeBST(root.left , left, root.val) && isSerachTreeBST(root.right, root.val, right);
}
private boolean isAllTreeBST(TreeNode root){
if (root == null){
return true;
}
int left = calculation(root.left, 0);
int right = calculation(root.right, 0);
if (left != right){
return false;
}
return isAllTreeBST(root.left) && isAllTreeBST(root.right);
}
private int calculation(TreeNode root, int n){
if (root == null){
return n;
}
int leftValue = calculation(root.left, n + 1);
int rightValue = calculation(root.right, n + 1);
return Math.max(leftValue, rightValue);
}
}
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
public TreeNode(int val, TreeNode left, TreeNode right) {
this.val = val;
this.left = left;
this.right = right;
}
}
牛客网:NC60 判断一棵二叉树是否为搜索二叉树和完全二叉树
于 2022-07-06 17:43:01 首次发布