博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二叉树先序遍历
阅读量:5009 次
发布时间:2019-06-12

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

关于二叉树的遍历讲得最好的还是wiki:

关于非递归版本,主要是在二叉树超级不平衡的情况下,有可能栈溢出。以下是我写得先序遍历非递归版本,应该是对的吧,没实际运行过,其实也不好写... 基本思路是用TreeNode * n去遍历,先左子树往下,完了pop出一个父节点,把自己变成右子树继续。所以Stack里存的其实是父节点的信息。以下是参考wiki百科的版本,栈用的很少,只推右子树。

public class Solution {	    public ArrayList
preorderTraversal(TreeNode root) { ArrayList
ans = new ArrayList
(); Stack
stack = new Stack
(); TreeNode n = root; while (n!= null || !stack.empty()) { if (n != null) { ans.add(n.val); if (n.right != null) { stack.push(n.right); } n = n.left; } else { n = stack.pop(); } } return ans; } }

其实还有一个更简单的版本,直接先把root.right推到栈里,然后root.left。但不知道为什么好像没有上面那个版本流行。大概如下,没有实际运行过。参考:

public class Solution {    public ArrayList
preorderTraversal(TreeNode root) { ArrayList
ans = new ArrayList
(); Stack
stack = new Stack
(); stack.push(root); while (!stack.empty()) { TreeNode n = stack.pop(); if (n != null) { ans.add(n.val); stack.push(n.right); stack.push(n.left); } } return ans; }}

  

转载于:https://www.cnblogs.com/lautsie/p/3260846.html

你可能感兴趣的文章
新博客牵至简书
查看>>
矩阵求逆
查看>>
在 Windows 8、Windows 10 桌面模式下的 .NET Framework 程序中,引用 Windows.Runtime 的 API。...
查看>>
2015 8月24号 工作计划与实行
查看>>
MVC AJAX
查看>>
Google Map API V3开发(6) 代码
查看>>
Kafka初入门简单配置与使用
查看>>
第三章Git使用入门
查看>>
Amd,Cmd, Commonjs, ES6 import/export的异同点
查看>>
cocos2dx-Lua与Java通讯机制
查看>>
上下文管理器之__enter__和__exit__
查看>>
android3.2以上切屏禁止onCreate()
查看>>
winform文件迁移工具
查看>>
delphi DCC32命令行方式编译delphi工程源码
查看>>
paip.输入法编程----删除双字词简拼
查看>>
or1200下raw-os学习(任务篇)
查看>>
ZOJ - 3939 The Lucky Week(日期循环节+思维)
查看>>
小花梨的取石子游戏(思维)
查看>>
Ubuntu 18.04安装arm-linux-gcc交叉编译器
查看>>
.net core i上 K8S(一)集群搭建
查看>>