题解 | #判断一棵二叉树是否为搜索二叉树和完全二叉树#

判断一棵二叉树是否为搜索二叉树和完全二叉树

http://www.nowcoder.com/practice/f31fc6d3caf24e7f8b4deb5cd9b5fa97

平衡二叉树

中序遍历,当前节点值不小于前一个节点值
不能如下直接赋值,会覆盖
self.is_search_tree = (self.pre.val >= root.val)

完全二叉树

思路一:将所有的结点全部押入队列中,空也压入,每次判断队列的头如果队列头为空了则跳出循环,如果此后队列中还有元素则不是完全二叉树。

# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

#
# 
# @param root TreeNode类 the root
# @return bool布尔型一维数组
#
class Solution:
    def judgeIt(self , root ):
        # write code here
        self.is_search_tree = True
        self.is_complete_tree = True
        self.pre = None
        def inorder(root):
            if root is None or not self.is_search_tree:
                return
            inorder(root.left)
            if self.pre is not None:
                self.is_search_tree = self.is_search_tree and not (self.pre.val >= root.val)
            self.pre = root
            inorder(root.right)
        inorder(root)

        def is_conplete_tree(root):
            if root is None:
                return True
            queue = [root]
            cur = queue.pop(0)
            while cur:
                queue.append(cur.left)
                queue.append(cur.right)
                cur = queue.pop(0)
            for q in queue:
                if q is not None:
                    return False
            return True
        self.is_complete_tree = is_conplete_tree(root)
        return [self.is_search_tree, self.is_complete_tree]
全部评论

相关推荐

11-27 17:35
已编辑
蚌埠坦克学院 C++
深信服 后台开发 n×12
点赞 评论 收藏
分享
贺兰星辰:不要漏个人信息,除了简历模板不太好以外你这个个人简介是不是太夸大了...
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务