题解 | #二叉树的中序遍历#
二叉树的中序遍历
https://www.nowcoder.com/practice/0bf071c135e64ee2a027783b80bf781d
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param root TreeNode类
# @return int整型一维数组
#
class Solution:
def inorderTraversal(self , root: TreeNode) -> List[int]:
# write code here
result=[]
self.a(root,result)
return result
def a(self,node,result):
if node==None:
return
self.a(node.left,result) # 这个递归的目的就是一直深入,直到找到左子树的最后叶子节点.
result.append(node.val)
self.a(node.right,result)
递归一直搞不太明白,写个笔记方便二次刷题:
主要就是递归函数:接收根节点node和列表result作为参数,最开始递归的时候,形参node传入的是根节点,当前根节点不为空,那就说明它可能有左子树或者右子树,所以判断完之后(line 21 22),进行下一次递归,这时候以及之后的每次递归传入的都是node.left,因为这个时候node.left又作为下一个指数的根节点,再次判断该节点是不是为空,如果为空,那就说明上一个节点没有左子树,那就返回,递归右子树,如果不为空,那就将该节点作为根节点再进行遍历,一直到没有左子树,这个时候就将该值添加到列表里,(如果有右子树,那么该值算根,如果没有,那么该值算左),然后就去遍历右子树,(该右子树表示的是左子树的右子树).