搜索二叉树:二叉树的中序遍历,在遍历的过程中,节点值都是递增的
class Node(object):
def __init__(self,value):
self.value = value
self.right = None
self.left = None
def isBst(head):
if head == None:
return True
stack = []
pre = float("-Inf")
while head!=None or len(stack)!=0:
if head!=None:
stack.append(head)
head = head.left
else:
head = stack.pop()
print(head.value)
if head.value > pre:
pre = head.value
head = head.right
else:
return False
return True
判断是否是完全二叉树
思想:
1、按层遍历二叉树,从每层的左边向右一次遍历所有节点
2、如果当前节点有右孩子节点,但是没有左孩子节点,直接返回False
3、如果当前节点并不是所有左右孩子都有,那么之后的所有节点必须都是叶子节点,否则返回False
4、遍历过程中如果不返回False,则遍历结束后返回True
def isCBT(node):
if node == None:
return True
queue = []
queue.append(head)
isLeaf = False
while queue:
root = queue.pop(0)
l = root.left
r = root.right
if (l==None and r!=None) or ((l!=None or r!=None) and isLeaf):
return False
if l!=None:
queue.append(l)
if r!=None:
queue.append(r)
else:
isLeaf = True
return True