中序遍历
这道题在看了好多个视频以后终于大概理解了em
第一种方法是用递归的方法
分别对应三种遍历
前序遍历:根左右
中序遍历:左根右
后序遍历:左右根
递归的时候终止条件便是当前节点root为空的时候
而中序遍历递归时则先尝试调用左节点 再打印当前根节点 再调用右节点就可
所以代码如下
1 2 3 4 5 6 7 8 9 10 11
| class Solution(object): def inorderTraversal(self, root): result = [] def mid_ord_tra(root): if not root: return mid_ord_tra(root.left) resule.append(root.val) mid_ord_tra(root.right) mid_ord_tra(root) return result
|
tips:dict为空时 not dict是True

第二种方法就是用迭代的方法
自己设置栈来模拟递归
当栈为空或者根节点为空则输出结果
先不断向栈中输入左结点 再把此左节点当作当前根节点
如果当前结点为空则说明左面全部入栈 那么从栈中弹出结点并输入到结果再转向当前结点的右节点
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| class Solution(object): def inorderTraversal(self, root): """ :type root: TreeNode :rtype: List[int] """ res = [] stack = [] while stack or root:
if root:
stack.append(root) root = root.left else:
root = stack.pop() res.append(root.val) root = root.right return res
|
