题解 | #二叉树的中序遍历#

二叉树的中序遍历

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又作为下一个指数的根节点,再次判断该节点是不是为空,如果为空,那就说明上一个节点没有左子树,那就返回,递归右子树,如果不为空,那就将该节点作为根节点再进行遍历,一直到没有左子树,这个时候就将该值添加到列表里,(如果有右子树,那么该值算根,如果没有,那么该值算左),然后就去遍历右子树,(该右子树表示的是左子树的右子树).

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务