LeetCode:二叉树的前序遍历【144】
2024-10-20 16:48:39
LeetCode:二叉树的前序遍历【144】
题目描述
给定一个二叉树,返回它的 前序 遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3 输出: [1,2,3]
题目分析
如果用递归代码的话,很简单,先序遍历,就是先遍历当前节点,接着是左孩子然后是右孩子,到每个孩子都是这样的处理过程。
public void preorder(TreeNode root,List<Integer> res)
{
if(root==null)
return;
res.add(root.val);
preorder(root.left,res);
preorder(root.right,res);
}
但是这道题,我们可以用栈来模拟递归的过程,从而加深对递归的理解程度。随便找一个二叉树,我们来手工模拟一下这个出入栈过程:
刚开始的时候1在栈内,也在栈顶。打印完1以后,我们需要把它的两个孩子加入到栈中,此时有一个问题,我们需要先加左还是先加右?
我们需要把下一个需要打印的元素发在栈顶,如果先加左孩子的话,那么右孩子就会处于栈顶,此时打印栈顶的话就是右孩子的值3,所以栈要先加右孩子,再加左孩子。
所以过程是:【1入栈】、1出栈打印输出1
【3入栈、2入栈】,2出栈打印输出2,然后【4入栈】,4出栈打印输出4,3出栈打印输出3.
Java题解
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
if(root==null)
return res;
Stack<TreeNode> stack = new Stack<>();
stack.push(root);
while (!stack.empty())
{
TreeNode node = stack.pop();
res.add(node.val);
if(node.right!=null)
stack.push(node.right);
if(node.left!=null)
stack.push(node.left);
}
return res;
}
最新文章
- iOS app内存分析套路
- 【腾讯Bugly干货分享】基于RxJava的一种MVP实现
- WinForm程序全局捕捉异常处理办法
- 作业七:团队项目——Alpha版本冲刺阶段-04
- iOS - Swift PList		数据存储
- Matlab找二维数组最大值
- html5 之 canvas 相关知识(三)API-strokeStyle-shadow相关
- SNMP监控一些常用OID的总结
- Java was started but returned exit code=13 C:\ProgramData\Oracle\Java\javapath\javaw.exe
- C#,json字符串转换成Json对象
- 读书笔记 effective c++ Item 31 把文件之间的编译依赖降到最低
- ScheduledFuture和RunnableScheduledFuture详解
- Appium环境搭建(Windows版)
- php常用面试题
- Esper剖析
- 自己动手造拖拉机轮子系列 -(react-loadable)
- C# 验证给定的字符串形式的日期是否合法
- linux磁盘管理 磁盘查看操作
- hbase源码系列(二)HTable 探秘
- Oracle EBS中有关Form的触发器的执行顺序