数据结构之树:

代码如下,首先创建树:节点定义

 

树结构,然后分别采用中序,左节点优先,右节点优先的方式遍历,

 

 

 

下面提供了可以复制的代码:

# -*- coding: utf-8 -*-
"""
Created on Mon Aug 7 09:59:47 2017

@author: lenovo
"""

#!/usr/bin/python
# -*- coding: utf-8 -*-

class TreeNode(object):
def __init__(self,val=0,left=0,right=0):
self.val= val
self.left = left
self.right = right


class BTree(object):
def __init__(self,root=0):
self.root = root

def is_empty(self):
if self.root is 0:
return True
else:
return False

def preOrder(self,treenode,s):
if treenode is None:
return 
s.append(treenode.val)
self.preOrder(treenode.left,s)
self.preOrder(treenode.right,s)

def inOrder(self,treenode,s):
if treenode is None:
return 
self.inOrder(treenode.left,s)
s.append(treenode.val)
self.inOrder(treenode.right,s)

def postOrder(self,treenode,s):
if treenode is None:
return 
self.postOrder(treenode.left,s)
self.postOrder(treenode.right,s)
s.append(treenode.val)

def printTree(self, root):
if not root: return [""]

def depth(root):
if not root: return 0
return max(depth(root.left), depth(root.right)) + 1

d = depth(root)
self.res = [[""] * (2**d - 1) for _ in range(d)]

def helper(node, d, pos):
self.res[-d - 1][pos] = str(node.val)
if node.left: helper(node.left, d - 1, pos - 2**(d - 1))
if node.right: helper(node.right, d - 1, pos + 2**(d - 1))

helper(root, d - 1, 2**(d - 1) - 1)
return self.res
def findTarget(self, root, k):
if not root: return False
bfs, s = [root], set()
for i in bfs:
if k - i.val in s: return True
s.add(i.val)
if i.left: bfs.append(i.left)
if i.right: bfs.append(i.right)
return False

class Solution(object):
def constructMaximumBinaryTree(self, nums):
"""
:type nums: List[int]
:rtype: TreeNode
"""
if not nums:
return None
i = nums.index(max(nums))
node = TreeNode(nums[i])
node.left = self.constructMaximumBinaryTree(nums[:i])
node.right = self.constructMaximumBinaryTree(nums[i + 1:])
return node
#gerate a tree named bt

#construct a max tree
maxtree=Solution()
nums=[1,2,3,6,5,0]
root=maxtree.constructMaximumBinaryTree(nums)
"""
another method to generate a tree
n1 = TreeNode(val=1)
n2 = TreeNode(2,n1,None)
n3 = TreeNode(3)
n4 = TreeNode(4)
n5 = TreeNode(5,n3,n4)
n6 = TreeNode(6,n2,n5)
n7 = TreeNode(7,n6,None)
n8 = TreeNode(8)
root = TreeNode(5,n7,n8)
"""

bt = BTree(root)

# diferent orders to search the value of bt
s_pre,s_in,s_post=list(),list(),list()
bt.preOrder(bt.root,s_pre) 
print (s_pre)
bt.inOrder(bt.root,s_in)
print (s_in)
bt.postOrder(bt.root,s_post)
print (s_post)

#print the tree in an array
res=bt.printTree(bt.root)

#find two values in the tree whose sums is the given target
k=9
t=bt.findTarget(bt.root,k)