数据结构之树:
代码如下,首先创建树:节点定义
树结构,然后分别采用中序,左节点优先,右节点优先的方式遍历,
下面提供了可以复制的代码:
# -*- 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)