leetcode_94. Binary Tree Inorder Traversal 二叉树的中序遍历,非递归算法,栈的思想
2016-11-17 20:23
369 查看
题目:
Given a binary tree, return the inorder traversal of its nodes' values.
For example:
Given binary tree
return
Note: Recursive solution is trivial, could you do it iteratively?
题意:
给定一棵二叉树,返回该二叉树中序遍历的结点值。递归算法太简单,能否用迭代的方法实现?
代码:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def inorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
res = [] #存储返回的结果,即中序遍历二叉树节点的值
lis = [] #用于存储节点,模拟栈
cur_node = TreeNode(0)
cur_node = root #当前节点
while cur_node != None or len(lis) > 0 : #当遇到叶子节点时,cur_node == None,此时要靠栈非空来重新进行循环
if cur_node != None : #如果当前节点不空,则入栈,然后继续遍历左孩子
lis.append(cur_node)
cur_node = cur_node.left
else :
cur_node = lis[-1].right #否则,上一个节点已经没有左孩了,取出栈顶元素(上一个节点),并将cur指向栈顶元素的右孩子,继续进行左根右的遍历
res.append(lis[-1].val) #记录栈顶节点的val值
lis.pop() #删除栈顶元素
return res
笔记:
1、可能非递归算法没有递归算法那么直观。python没有栈的概念,可以用list模拟栈。
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].
Note: Recursive solution is trivial, could you do it iteratively?
题意:
给定一棵二叉树,返回该二叉树中序遍历的结点值。递归算法太简单,能否用迭代的方法实现?
代码:
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def inorderTraversal(self, root):
"""
:type root: TreeNode
:rtype: List[int]
"""
res = [] #存储返回的结果,即中序遍历二叉树节点的值
lis = [] #用于存储节点,模拟栈
cur_node = TreeNode(0)
cur_node = root #当前节点
while cur_node != None or len(lis) > 0 : #当遇到叶子节点时,cur_node == None,此时要靠栈非空来重新进行循环
if cur_node != None : #如果当前节点不空,则入栈,然后继续遍历左孩子
lis.append(cur_node)
cur_node = cur_node.left
else :
cur_node = lis[-1].right #否则,上一个节点已经没有左孩了,取出栈顶元素(上一个节点),并将cur指向栈顶元素的右孩子,继续进行左根右的遍历
res.append(lis[-1].val) #记录栈顶节点的val值
lis.pop() #删除栈顶元素
return res
笔记:
1、可能非递归算法没有递归算法那么直观。python没有栈的概念,可以用list模拟栈。
相关文章推荐
- 每天一道LeetCode-----根据中序遍历和后序遍历重构二叉树
- 扩展二叉树 建立 以及 前序遍历 中序遍历 后序遍历 的非递归算法
- LeetCode之通过二叉树的中序遍历和后序遍历还原二叉树
- 【LeetCode】101. Symmetric Tree 中序遍历,分支遍历,二叉树
- 数据结构-----中序遍历二叉树非递归算法(利用堆栈实现)
- LeetCode:BInary Tree Inorder Traversal(二叉树的中序遍历)
- [LeetCode] 94. 中序遍历二叉树
- LeetCode Binary Tree Inorder Traversal 中序遍历二叉树
- [LeetCode] 94. 中序遍历二叉树
- 【LeetCode】98. Validate Binary Search Tree 解法,中序遍历,搜索二叉树合法性
- [LeetCode] 94. 中序遍历二叉树
- 二叉树的前序遍历、中序遍历和后序遍历的递归和非递归算法
- [leetcode]_根据二叉树的先序遍历(后序遍历) + 中序遍历 重建二叉树
- [LeetCode] Binary Tree Inorder Traversal 二叉树的中序遍历
- 数据结构-----二叉树的中序遍历的非递归算法实现
- [LeetCode] 94. 中序遍历二叉树
- leetcode | 二叉树的前序遍历、中序遍历、后续遍历的非递归实现
- [LeetCode] 94. 中序遍历二叉树
- LeetCode | Binary Tree Inorder Traversal(二叉树的中序遍历)