简单递归加判断
判断一棵二叉树是否为搜索二叉树和完全二叉树
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); } }