博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Leetcode 94. Binary Tree Inorder Traversal
阅读量:5144 次
发布时间:2019-06-13

本文共 1034 字,大约阅读时间需要 3 分钟。

Given a binary tree, return the inorder traversal of its nodes' values.

For example:

Given binary tree [1,null,2,3],

1    \     2    /   3

return [1,3,2].

 

本题如果用recursive的方法非常简单。这里主要考察用iterative的方法求解。例如: [1,3,4,6,7,8,10,13,14]

从8开始依次将8,3,1 push入栈。这时root=None,每当root=None时就从stack里pop一个node出来。并将root定义成3的右子树。

这里其实有一个中间步骤,就是pop出1来之后,root被定义成了1的right kid,然而1并没有right kid。但是这是stack里面还有[8, 3]。所以下一次运行L9的while时,我们会跳过L10-L12直接从stack里面在pop出3来。

然后又是用while root将最以3为root的tree左边的一条臂全都推入栈中。

所以这个解法的巧妙之处就在于我们其实每次从stack里面pop出一个node时,都试图将root挪到他的右子树的root。

1 class Solution(object): 2     def inorderTraversal(self, root): 3         """ 4         :type root: TreeNode 5         :rtype: List[int] 6         """ 7         ans = [] 8         stack = [] 9         while stack or root:10             while root:11                 stack.append(root)12                 root = root.left13             root = stack.pop()14             ans.append(root.val)15             root = root.right16         return ans17

 

转载于:https://www.cnblogs.com/lettuan/p/6248118.html

你可能感兴趣的文章
Hbuild在线云ios打包失败,提示BuildConfigure Failed 31013 App Store 图标 未找到 解决方法...
查看>>
找到树中指定id的所有父节点
查看>>
jQuery on(),live(),trigger()
查看>>
treegrid.bootstrap使用说明
查看>>
[Docker]Docker拉取,上传镜像到Harbor仓库
查看>>
javascript 浏览器类型检测
查看>>
记录:Android中StackOverflow的问题
查看>>
导航,头部,CSS基础
查看>>
[草稿]挂载新硬盘
查看>>
[USACO 2017 Feb Gold] Tutorial
查看>>
关于mysql中GROUP_CONCAT函数的使用
查看>>
OD使用教程20 - 调试篇20
查看>>
gzip
查看>>
转负二进制(个人模版)
查看>>
LintCode-Backpack
查看>>
查询数据库锁
查看>>
我对于脚本程序的理解——百度轻应用有感
查看>>
面试时被问到的问题
查看>>
当前记录已被另一个用户锁定
查看>>
Node.js 连接 MySQL
查看>>