1. 给定一个二叉树,确定它是高度平衡的。

一棵高度平衡的二叉树的定义是:一棵二叉树中每个节点的两个子树的深度相差不会超过1。 

依然采用分治法的思想,若一棵树的左右子树都是平衡二叉树,那么这棵树一定是平衡二叉树。

以及只要求出左右子树的深度就可以判断出这棵树是不是平衡二叉树了。

class TreeNode:
    def __init__(self,value):
        self.value=value
        self.left=None
        self.right=None

def getHeight(root):
    if root is None:
        return 0
    return 1+max(getHeight(root.left),getHeight(root.right))

def isbalance(root):
    if root is None:
        return True
    if abs(getHeight(root.left)-getHeight(root.right))>1:
        return False
    return isbalance(root.left) and isbalance(root.right)

# node1=TreeNode(3)
# node2=TreeNode(9)
# node3=TreeNode(20)
# node4=TreeNode(15)
# node5=TreeNode(7)
# node1.left=node2
# node1.right=node3
# node3.left=node4
# node3.right=node5


node1=TreeNode(3)
node2=TreeNode(20)
node3=TreeNode(15)
node4=TreeNode(7)
node1.right=node2
node2.left=node3
node2.right=node4

print(isbalance(node1))

 2.N叉树的前序遍历

前序遍历:对于当前节点,先输出该节点,然后输出他的左孩子,最后输出他的右孩子。以上图为例,递归的过程如下:

class TreeNode:
    def __init__(self,value):
        self.value=value
        self.children=None

def find(root):
    if root is None:
        return []
    list.append(root.value)
    if root.children:
        for node in root.children:
            print(root.value,node.value)
            find(node)



node1=TreeNode(1)
node2=TreeNode(2)
node3=TreeNode(3)
node4=TreeNode(4)
node5=TreeNode(5)
node6=TreeNode(6)

node1.children=[node3,node2,node4]
node3.children=[node5,node6]

list=[]
find(node1)
print(list)

 

posted on 2020-10-11 12:45  happygril3  阅读(67)  评论(0)    收藏  举报

导航