原题地址:http://oj.leetcode.com/problems/binary-tree-preorder-traversal/

题意:这题用递归比较简单。应该考察的是使用非递归实现二叉树的先序遍历。先序遍历的遍历顺序是:根,左子树,右子树。

解题思路:如果树为下图:

                      1

                     /     \

                    2         3

                   /     \    /    \

                   4       5  6     7

    使用一个栈。步骤为:

    一,先遍历节点1,并入栈,如果有左孩子,继续遍历并入栈,一直到栈为{1,2,4}。

    二,开始弹栈,当栈顶元素为2时,弹出2,并检测2存在右孩子5,于是遍历5并入栈,此时栈为{1,5}。

    三,弹出5,5没有左右孩子,继续弹栈,将1弹出后,栈为{}。

    四,由于1存在右孩子,则继续按照以上步骤入栈出栈。{3, 6}->{7}->{},结束。

    栈的状态变化:{1}->{1,2}->{1,2,4}->{1,2}->{1}->{1,5}->{1}->{}->{3}->{3,6}->{3}->{}->{7}->{}。

代码:

# Definition for a  binary tree node
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None class Solution:
# @param root, a tree node
# @return a list of integers
def iterative_preorder(self, root, list):
stack = []
while root or stack:
if root:
list.append(root.val)
stack.append(root)
root = root.left
else:
root = stack.pop()
root = root.right
return list def recursive_preorder(self, root, list):
if root:
list.append(root.val)
self.preorder(root.left,list)
self.preorder(root.right,list) def preorderTraversal(self,root):
list = []
self.iterative_preorder(root,list)
return list

最新文章

  1. tomcat7 启动项目报错 java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig()
  2. React Native填坑之旅--LayoutAnimation篇
  3. EPANET中的哈希文件——hash.c
  4. CentOS环境下Java开发环境的搭建
  5. Doing Homework(HDU 1074状压dp)
  6. MySQL can’t specify target table for update in FROM clause
  7. 佛主保佑,永无bug
  8. Uva 10652 Board Wrapping(计算几何之凸包+点旋转)
  9. java按值传递理解(转)
  10. JS数组中shift()和push(),unshift()和pop()操作方法使用
  11. c# 对象 & 类
  12. 015_ICMP专项研究监控
  13. message box
  14. FreeRTOS的任务非运行态
  15. c语言的重构、清理与代码分析图形化浏览工具: CScout
  16. AMR文件结构
  17. swagger 入门
  18. Intel Cyclone SoC FPGA介绍
  19. Firefox、Chrome、IE9、IE8、IE7、IE6等浏览器HTTP_USER_AGENT汇总
  20. sublime text3 破解及常用插件

热门文章

  1. UNP学习总结(二)
  2. CentOS7.4 关闭firewall防火墙,改用iptables
  3. android setContentView
  4. Apache之.htaccess备忘录(二)
  5. Codeforces Round #354 (Div. 2) E. The Last Fight Between Human and AI 数学
  6. scriptlet
  7. 在当前的webview中跳转到新的url 使用WebView组件显示网页
  8. 【Go入门教程8】interface(interface类型、interface值、空interface{}、嵌入interface、反射)
  9. git diff 打补丁
  10. systemtap 2.8 news