104. Maximum Depth of Binary Tree -- 二叉数、递归

104. Maximum Depth of Binary Tree

Given a binary tree, find its maximum depth.

The maximum depth is the number of nodes along the longest path from the root node down to the farthest leaf node.

解1:
经典的二叉树问题,所以使用到了递归。
二叉树的生成本生就使用了递归。

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def maxDepth(self, root):
        """
        :type root: TreeNode
        :rtype: int
        """
        if root == None:
            return 0
        left_length = self.maxDepth(root.left)
        right_length = self.maxDepth(root.right)
        return max(left_length, right_length) + 1

Python数据结构实现二叉树

引用:http://www.jianshu.com/p/e86bc2c0d51c
树的定义  

  树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构,很象自然界中的树那样。树结构在客观世界中广泛存在,如人类社会的族谱和各种社会组织机构都可用树形象表示。树在计算机领域中也得到广泛应用,如在编译源程序时,可用树表示源程序的语法结构。又如在数据库系统中,树型结构也是信息的重要组织形式之一。一切具有层次关系的问题都可用树来描述。

树结构的特点是:它的每一个结点都可以有不止一个直接后继,除根结点外的所有结点都有且只有一个直接前驱。

树的递归定义如下:

至少有一个结点(称为根)
其它是互不相交的子树
二叉树

二叉树是由n(n≥0)个结点组成的有限集合、每个结点最多有两个子树的有序树。它或者是空集,或者是由一个根和称为左、右子树的两个不相交的二叉树组成。

特点:

二叉树是有序树,即使只有一个子树,也必须区分左、右子树;
二叉树的每个结点的度不能大于2,只能取0、1、2三者之一;
二叉树中所有结点的形态有5种:空结点、无左右子树的结点、只有左子树的结点、只有右子树的结点和具有左右子树的结点。

代码实现:

#-*- encoding:utf-8 -*-

'''
树的构建:
     5
  6     7
8         9
'''

class Tree():
   '树的实现'
    def __init__(self,ltree = 0,rtree = 0,data = 0):
        self.ltree = ltree
        self.rtree = rtree
        self.data = data
class BTree():
    '二叉树的实现'
    def __init__(self,base = 0):
        self.base = base
    def _Empty(self):
        '是否为空树'
        if self.base == 0:
            return True
        else:
            return False
    def qout(self,tree_base):
        '前序遍历:根-左-右'
        if tree_base == 0:
            return
        print tree_base.data
        self.qout(tree_base.ltree)
        self.qout(tree_base.rtree)
    def mout(self,tree_base):
        '中序遍历:左-根-右'
        if tree_base == 0:
            return
        self.mout(tree_base.ltree)
        print tree_base.data
        self.mout(tree_base.rtree)
    def hout(self,tree_base):
        '后序遍历:左-右-根'
        if tree_base == 0:
            return
        self.hout(tree_base.ltree)
        self.hout(tree_base.rtree)
        print tree_base.data
#test

tree1 = Tree(data=8)
tree2 = Tree(data=9)
tree3 = Tree(tree1,data=6)
tree4 = Tree(tree2,0,data=7)
base = Tree(tree3,tree4,5)
btree = BTree(base)
print '前序遍历结果:'
btree.qout(btree.base)
print '中序遍历结果:'
btree.mout(btree.base)
print '后序遍历结果:'
btree.hout(btree.base)
引用

[1] http://www.jianshu.com/p/e86bc2c0d51c

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值