标签:treenode 序列 order 建立 else nbsp self __init__ init
在python中二叉树的构建是利用类来实现的,在此之前我们先去了解一下什么是类
贴上一篇文章的网址:http://python.jobbole.com/81921/
主要是对这篇文章的总结和整理。
用一个小例子来看一下:
class Test: def prt(self): print(self) print(self.__class__) t=Test()#类的实例化 t.prt()
执行结果:
<__main__.Test object at 0x000001A4C4FE81D0> <class ‘__main__.Test‘>
在Python的解释器内部,当我们调用t.prt()时,实际上Python解释成Test.prt(t),也就是说把self替换成类的实例。
让我们看看不加self是什么情况
class Test:
def prt():
print(self)
t = Test()
t.prt()
结果:
----> 6 t.prt()
TypeError: prt() takes 0 positional arguments but 1 was given
简单来说,使用self,类似与先占用一个位置,之后如果类中有产生了一个实例,就可以将这个参数位置让给实例(自己的理解,不知道对不对)
lst=[1,2,3]
list.reverse(lst)
print(lst)
lst.reverse()
print(lst)
结果:
[3, 2, 1]
[1, 2, 3]
class.function(lst)等价于lst.function()
确实两种调用方法是一样的
牛客网习题总结:
1. 递归二叉树的序列打印
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class TreeToSequence:
def convert(self, root):
# write code here
shuchu=[[],[],[]]
self.xianxu(root,shuchu[0])
self.zhongxu(root,shuchu[1])
self.houxu(root,shuchu[2])
return shuchu
def xianxu(self,root,shuchu):
if root == None:
return 0
else:
shuchu.append(root.val)
self.xianxu(root.left,shuchu)
self.xianxu(root.right,shuchu)
return shuchu
def zhongxu(self,root,shuchu):
if root == None:
return 0
else:
self.zhongxu(root.left,shuchu)
shuchu.append(root.val)
self.zhongxu(root.right,shuchu)
return shuchu
def houxu(self,root,shuchu):
if root == None:
return 0
else:
self.houxu(root.left,shuchu)
self.houxu(root.right,shuchu)
shuchu.append(root.val)
return shuchu
2. 非递归二叉树的序列打印
# -*- coding:utf-8 -*-
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class TreeToSequence:
def convert(self, root):
# write code here
shuchu=[[],[],[]]
self.xianxu(root,shuchu[0])
self.zhongxu(root,shuchu[1])
self.houxu(root,shuchu[2])
return shuchu
def xianxu(self,root,res):
stack=[]
stack.append(root)
while len(stack):
cur=stack.pop()
res.append(cur.val)
if cur.right:
stack.append(cur.right)
if cur.left:
stack.append(cur.left)
return res
def zhongxu(self,root,res):
stack=[]
cur=root
while cur or len(stack):
if cur:
stack.append(cur)
cur=cur.left
else:
node=stack.pop()
res.append(node.val)
cur=node.right
return res
def houxu(self,root,res):
stack1=[]
stack2=[]
stack1.append(root)
while len(stack1):
cur = stack1.pop()
stack2.append(cur.val)
if cur.left:
stack1.append(cur.left)
if cur.right:
stack1.append(cur.right)
while len(stack2):
res.append(stack2.pop())
return res
3. 如何建立一棵二叉树&统计树中结点个数&树中所有元素之和
树结构:
class Tree:
def __init__(self,x,left=None,right=None):
self.key=x
self.left=left
self.right=right
#构建二叉树
t=Tree(2,Tree(5,Tree(8),Tree(9)),Tree(7,Tree(10),Tree(11)))
#统计数中结点个数
def count_BinTNodes(t):
if t is None:
return 0
else:
return 1+count_BinTNodes(t.left)+count_BinTNodes(t.right)
coun=count_BinTNodes(t)
print(coun)
#树中所有元素之和
def sum_BinTNodes(t):
if t is None:
return 0
else:
return t.key+sum_BinTNodes(t.left)+sum_BinTNodes(t.right)
summ=sum_BinTNodes(t)
print(summ)
结果:
7 52
4.先序遍历&先序遍历每一个元素,并且将None位置输出为#,这样才能准确的理解树的结构&加括号
#先序遍历整棵树
def preorder(t):
if t is None:
return
else:
print(str(t.key),end="")
preorder(t.left)
preorder(t.right)
#先序遍历整棵树,将None位置输出为#,这样才能准确的理解树的结构
preorder(t)
print()
def preorder2(t):
if t is None:
print(‘#‘,end="")
return
else:
print(str(t.key),end="")
preorder2(t.left)
preorder2(t.right)
preorder2(t)
print()
#先序遍历整棵树,将None位置输出为#,这样才能准确的理解树的结构,并输出为(2(5(8##)(9##))(7(10##)(11##)))
def preorder3(t):
if t is None:
print(‘#‘,end="")
return
else:
print("("+str(t.key),end="")
preorder3(t.left)
preorder3(t.right)
print(")",end="")
preorder3(t)
输出结果:
258971011 258##9##710##11## (2(5(8##)(9##))(7(10##)(11##)))
标签:treenode 序列 order 建立 else nbsp self __init__ init
原文地址:http://www.cnblogs.com/qxl1993/p/7652118.html