作为要准备踏入码农行业的人来说,要准备校招,怎么能不去刷刷LeetCode呢?
257.二叉树的所有路径
- 题目要求
给定一个二叉树,返回所有从根节点到叶子节点的路径。
说明: 叶子节点是指没有子节点的节点。
- 例如
输入:
1
/ \
2 3
\
5
输出: ["1->2->5", "1->3"]
解释: 所有根节点到叶子节点的路径为: 1->2->5, 1->3
- 分析
方法:想到的是模拟深度搜索,判断节点是否还有无左右子树如果没有就说明已经到了叶子节点可以返回一个路径了
class Solution(object):
def binaryTreePaths(self, root):
if root is None:
return
strs=""
lists=[]
self.q(root,lists,strs)
return lists
def q(self,root,lists,strs):
if not root.left and not root.right:
strs=strs+str(root.val)
lists.append(strs)
strs=strs+str(root.val)+'->'
if root.left :
self.q(root.left,lists,strs)
if root.right:
self.q(root.right, lists, strs)
404.左叶子之和
- 题目要求
计算给定二叉树的所有左叶子之和。
- 例如
3
/ \
9 20
/ \
15 7
在这个二叉树中,有两个左叶子,分别是 9 和 15,所以返回 24
- 分析
方法:深度搜索,不累加右叶子节点的值即可
class Solution(object):
def sumOfLeftLeaves(self, root):
if root is None:
return 0
if root and not root.left and not root.right:
return 0
nums=0
lists=[]
self.q(root,lists)
for i in lists:
nums=nums+i
return nums
def q(self,root,lists):
if root.left is None and root.right is None:
lists.append(root.val)
if root.left:
self.q(root.left,lists)
#判断是否是右叶子节点
if root.right and (root.right.left or root.right.right):
self.q(root.right,lists)