(leetcode刷题)
二叉树的中序遍历
题目: 给定一个二叉树,返回它的中序遍历。(中序遍历(LDR)首先遍历左子树,然后访问根结点,最后遍历右子树。)
示例:
方法一:递归
- 递归:
- 根节点不存在则返回空集
- 从左子树到根到右子树。若该节点下无子树,则添加该节点的值。
class Solution:
def inorderTraversal(self, root: TreeNode) -> List[int]:
node=[]
if not root:return node
if not root.left and not root.right:
node.append(root.val)
return node
if root.left: node.extend(self.inorderTraversal(root.left))
node.append(root.val)
if root.right: node.extend(self.inorderTraversal(root.right))
return node
方法二:迭代
- 思路:用一个栈存放经过的节点。从上开始遍历,若当前节点存在,则将该节点压入栈中,找下一个左子树。若该节点不存在,取出栈中上一个节点并存放其值,找其右子树……重复以上过程,直至栈中不存在经过的节点。