python 树

1 树的高度和深度

1.1 高度

对于高度,就像楼房,问你一幢楼有多高?

然后,你就从下往上一层一层的数。树也是根据习惯,从下往上数的。

还有一个问题,对于楼房,地面上的一层是第一层,然后依次往上是第二层、第三次。。。

对于树,最下面的叶子节点是指第一层吗?先看看树高度的定义:

树某个节点x的高度;

高度:从结点x向下到某个叶结点最长简单路径边的条数。

这个定义有两点需要注意:1、最长简单路径 2,高度就是边的条数

G节点高度是多少呢?

有两条路径:G-l, G-M-O,选哪个呢?

最长简单路径: G-M-O

高度就是边的条数:两条

回到刚开始的问题,最下面的叶子节点是指第一层吗?答案不是,最下面的叶子节点是第0层

 

1.2 深度

对于深度,问你一口经有多深?

你往井里望一望,视角是往下。

所以呢,对于树的深度,也是从上往下数的。

根节点的深度是0.

二叉树的深度,递归实现:

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    def TreeDepth(self, pRoot):
        # write code here
        if not pRoot:
            return 0
        else:
            leftx = self.TreeDepth(pRoot.left)+1
            rightx = self.TreeDepth(pRoot.right) + 1
            maxx = max(leftx,rightx)
            return maxx

2 二叉排序树bst

二叉排序树(Binary Sort Tree)又称二叉查找树。它或是一颗空树,或者具有以下性质的二叉树:

1、若左子树不为空,则左子树上所有节点的值均小于根节点的值

2、若右子树不为空,则右子树上所有节点的值均大于根节点的值

3、左右子树也分别为二叉排序树

2 平衡二叉树AVL

平衡二叉树:它或者是一颗空树,或者具有以下性质的二叉树:

它的左子树和右子树的深度之差(平衡因子)的绝对值不超过1

且它的左子树和右子树都是一颗平衡二叉树

判断是否是平衡二叉树:

# -*- coding:utf-8 -*-
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
class Solution:
    def IsBalanced_Solution(self, pRoot):
        # write code here
        return self.balancedheight(pRoot)>=0
    def balancedheight(self,pRoot):
        if not pRoot:
            return 0
        else:
            left = self.balancedheight(pRoot.left)
            right = self.balancedheight(pRoot.right)
            if left <0 or right <0 or abs(left-right)>1:
                return -1
            else:
                return max(left,right) + 1

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值