[leetcode]Binary Tree Preorder Traversal @ Python
2024-08-31 01:04:27
原题地址: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
最新文章
- tomcat7 启动项目报错 java.lang.NoSuchMethodError: javax.servlet.ServletContext.getSessionCookieConfig()
- React Native填坑之旅--LayoutAnimation篇
- EPANET中的哈希文件——hash.c
- CentOS环境下Java开发环境的搭建
- Doing Homework(HDU 1074状压dp)
- MySQL can’t specify target table for update in FROM clause
- 佛主保佑,永无bug
- Uva 10652 Board Wrapping(计算几何之凸包+点旋转)
- java按值传递理解(转)
- JS数组中shift()和push(),unshift()和pop()操作方法使用
- c# 对象 &; 类
- 015_ICMP专项研究监控
- message box
- FreeRTOS的任务非运行态
- c语言的重构、清理与代码分析图形化浏览工具: CScout
- AMR文件结构
- swagger 入门
- Intel Cyclone SoC FPGA介绍
- Firefox、Chrome、IE9、IE8、IE7、IE6等浏览器HTTP_USER_AGENT汇总
- sublime text3 破解及常用插件
热门文章
- UNP学习总结(二)
- CentOS7.4 关闭firewall防火墙,改用iptables
- android setContentView
- Apache之.htaccess备忘录(二)
- Codeforces Round #354 (Div. 2) E. The Last Fight Between Human and AI 数学
- scriptlet
- 在当前的webview中跳转到新的url 使用WebView组件显示网页
- 【Go入门教程8】interface(interface类型、interface值、空interface{}、嵌入interface、反射)
- git diff 打补丁
- systemtap 2.8 news