简单递归加判断
判断一棵二叉树是否为搜索二叉树和完全二叉树
http://www.nowcoder.com/questionTerminal/f31fc6d3caf24e7f8b4deb5cd9b5fa97
进行中序遍历,如果有序则为二叉搜索树,在中序遍历的同时计算叶子节点的个数。list的长度为树中节点的个数,通过公式:如果为完全二叉树则——如果总节点的个数(len)为奇数,叶子节点的个数为(len+1)/2,如果为偶数,则叶子节点的个数为len/2,判断是否为一颗完全二叉树。
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布尔型一维数组
*/
List<Integer> list = new ArrayList<>();
int treeLen = 0;
public boolean[] judgeIt (TreeNode root) {
boolean[] flag = new boolean[2];
// write code here
if (root == null)
return flag;
helper(root);
int len = list.size();
int tmp = (len % 2 == 1 ? (len+1)/2 : len / 2);
if (tmp == treeLen)
flag[1] = true;
for (int i = 1; i < len; i++)
{
if (list.get(i) < list.get(i-1))
{
return flag;
}
}
flag[0] = true;
return flag;
}
public void helper(TreeNode root)
{
if (root == null)
return ;
if (root.left == null && root.right == null)
treeLen++;
helper(root.left);
list.add(root.val);
helper(root.right);
}
}
美的集团公司福利 866人发布