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)