class Solution:
def isBalanced(self, root: Optional[TreeNode]) -> bool:
return self.hight(root) != -1
def hight(self,root):#自下而上的遍历,采用后序遍历
if not root:
return 0
left = self.hight(root.left)
if left == -1:
return -1
right = self.hight(root.right)
if right == -1 or abs(left - right) > 1:
return -1
return max(left,right) + 1
class Solution:
def sumOfLeftLeaves(self, root: Optional[TreeNode]) -> int:#采用后序遍历
if not root:
return 0
if not root.left and not root.right:
return 0
if root.left and not root.left.left and not root.left.right:#找到了左叶子节点,记录值
left_value = root.left.val
else:
left_value = self.sumOfLeftLeaves(root.left)#递归左子树
right_value = self.sumOfLeftLeaves(root.right)#递归右子树
return left_value + right_value #相加则为当前节点树的左叶子之和
class Solution:
def sumOfLeftLeaves(self, root: Optional[TreeNode]) -> int:#采用迭代法
if not root:
return 0
stack = [root]
res = 0
while stack:
cur = stack.pop()#每次都将节点的左右节点加入栈中
if cur.left and not cur.left.left and not cur.left.right:#找到一个左叶子节点
res += cur.left.val
if cur.left:
stack.append(cur.left)
if cur.right:
stack.append(cur.right)
return res