中级农民
- 积分
- 275
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2014-5-21
- 最后登录
- 1970-1-1
|
- class TreeNode:
- def __init__(self,val, left, right):
- self.val = val
- self.left = left
- self.right = right
- badNodes = set()
- def isBadNode(node):
- if node in badNodes:
- return True
- else:
- return False
- def printTree(root):
- def getHeight(root):
- if root is None:
- return 0
- return 1 + max(map(getHeight, [root.left, root.right]))
- def fill(root, i, l ,r):
- if root is None:
- return
- res[i][(l+r)/2] = '' + str(root.val)
- fill(root.left, i + 1, l, (l + r) / 2)
- fill(root.right, i + 1, (l + r + 1) / 2, r)
- height = getHeight(root)
- res = [[''] * ((1 << height )-1) for _ in range(height)] # need to be (1<< hegith) -1 this () is needed
- fill(root,0, 0, len(res[0]))
- for x in res:
- print x
- return res
- def printForest(forest):
- print 'print forest.......'
- for tree in forest:
- printTree(tree)
- print '========'
- def trimTree(root):
- forest = []
- def helper(node, parent_added):
- if node is None:
- return None
- if isBadNode(node):
- helper(node.left, False)
- helper(node.right, False)
- else:
- if not parent_added:
- forest.append(node)
- helper(node.left, True)
- helper(node.right, True)
- # unlink
- if isBadNode(node.left):
- node.left = None
- if isBadNode(node.right):
- node.right = None
- helper(root, False)
- return forest
- node10 = TreeNode(10, None, None)
- node8 = TreeNode(8, None, None)
- node4 = TreeNode(4, None, None)
- node2 = TreeNode(2, None, None)
- node9 = TreeNode(9, None, None)
- node13 = TreeNode(13, None, None)
- node11 = TreeNode(11, None, None)
- node12 = TreeNode(12, None, None)
- node10.left = node8
- node8.right = node9
- node8.left = node4
- node4.left = node2
- node10.right = node13
- node13.left = node11
- node11.right = node12
- printTree(node10)
- #badNodes = set([node10, node8, node12])
- #badNodes = set([node10])
- badNodes = set([node8])
- forest = trimTree(node10)
- printForest(forest)
- def constructBST(badNodes, forest):
- nodes = list(badNodes) + forest
- nodes = sorted(nodes, key = lambda x: x.val)
- print 'nodes in hand are', [n.val for n in nodes]
- def dfs(nums, i, j):
- if i > j:
- return None
- mid = (j - i) /2 + i
- root = nums[mid]
- left = dfs(nums, i, mid -1)
- if left:
- root.left = left
-
- right = dfs(nums, mid +1, j)
- if right:
- root.right = right
- return root
- root = dfs(nodes,0, len(nodes)-1)
- printTree(root)
- return root
- constructBST(badNodes, forest)
复制代码 |
|