活跃农民
- 积分
- 643
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2018-1-16
- 最后登录
- 1970-1-1
|
this is a hard one....
- class Node():
- def __init__(self, val):
- self.val = val
- self.left = None
- self.right = None
- class Solution():
- def dfs(self, root):
- if root == None:
- return 0
- if root.left == root.right == None:
- return root.val
- return self.dfs(root.left) + self.dfs(root.right)
- def iter(self, root):
- stack = []
- cur = root
- sum_ = 0
- while True:
- while cur:
- stack.append(cur)
- cur = cur.left
- if len(stack) > 0:
- temp = stack.pop()
- cur =temp.right
- if temp.left == temp.right == None:
- sum_ += temp.val
- else:
- break
- return sum_
- def iter1(self, root):
- stack = []
- cur = root
- sum_ = 0
- while stack or cur:
- while cur:
- stack.append(cur)
- cur = cur.left
- temp = stack.pop()
- cur =temp.right
- if temp.left == temp.right == None:
- sum_ += temp.val
- return sum_
- def time_complexity_1(self, root):
- sum_ = 0
- cur = root
- while cur:
- print("cur", cur.val)
- # find the rightest node r
- r = cur.left
- if r == None: # if cur.left == None, go cur.right
- if cur.right == None:
- sum_ += cur.val
- cur = cur.right
- print('if cur.left == None, go cur.right,,, cur=', cur.val if cur else None)
- ##################
- continue
- while r.right:
- r = r.right
- if r == cur:
- print('find a loop', cur.val)
- # cur = cur.right
- '''
- need to break two loop
- '''
- break
- if r == cur:
- cur = cur.right
- continue
- print('find the rightest node r', r.val)
- #check if it is a leaf
- if r.left == r.right == None:
- sum_ += r.val
- # r.right = cur
- r.right = cur
- print('r.right', r.right.val)
- print("")
- cur = cur.left
- return sum_
- root = Node(10)
- root.left = Node(5)
- root.right = Node(30)
- root.right.right = Node(40)
- root.left.left = Node(-2)
- root.left.right = Node(6)
- root.left.right.right = Node(8)
- root.left.left.right = Node(2)
- root.left.left.right.left = Node(-1)
- a = Solution()
- print(a.dfs(root))
- print(a.iter1(root))
- print(a.time_complexity_1(root))
复制代码 |
|