Given a binary tree, return the preorder traversal of its nodes' values.

For example:
Given binary tree {1,#,2,3},

   1
\
2
/
3

return [1,2,3].

Note: Recursive solution is trivial, could you do it iteratively?

解题:应该是很简单的一道题,纠结了好久T_T

基本思路很简单,用栈模拟就可以了。首先根节点压栈,每次弹出栈顶元素,并把它的值存入返回值向量中。如果它的右子树不为空,就把右子树根节点压栈,左子树不为空也把左子数根节点压栈,注意一定是右左这样的顺序。

主要纠结在两个地方:

1. 结构体指针的初始化:

struct TreeNode* root = (struct TreeNode*)malloc(sizeof(struct TreeNode));

  注意要给指针分配空间,使用malloc需要包含头文件#include<cstdlib>

2.每次压栈以后栈顶元素就变了,所以要先把栈顶元素pop到一个变量中,再继续后续操作。

代码如下:

 /**
* Definition for binary tree
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
#include <iostream>
#include <stack>
#include <vector>
#include <cstdlib>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
class Solution {
public:
vector<int> preorderTraversal(TreeNode *root) {
stack<TreeNode*>s;
vector<int>ans;
if(root == NULL)
return ans;
s.push(root);
while(!s.empty()){
struct TreeNode* temp = s.top();
s.pop();
ans.push_back(temp->val);
if(temp->right != NULL)
s.push(temp->right);
if(temp->left != NULL){
s.push(temp->left);
}
}
return ans;
}
};
int main(){
Solution so;
struct TreeNode* root = (struct TreeNode*)malloc(sizeof(struct TreeNode));
struct TreeNode* root_l_c = (struct TreeNode*)malloc(sizeof(struct TreeNode)); root->val = ;
root_l_c->val = ; root_l_c->left = NULL;
root_l_c->right = NULL; root->right = NULL;
root->left = root_l_c;
//cout << root->left->val<<endl;
so.preorderTraversal(root);
}

Java版本递归解法:

 public class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> answer = new ArrayList<>();
return preorderTraversalHelper(answer, root);
}
public List<Integer> preorderTraversalHelper(List<Integer> answer,TreeNode root) {
if(root == null)
return answer;
answer.add(root.val);
answer = preorderTraversalHelper(answer,root.left);
answer = preorderTraversalHelper(answer,root.right);
return answer;
}
}

一个小笔记是在eclipse里面使用List或者ArrayList的时候要加上

import java.util.ArrayList;import java.util.List;

【leetcode刷题笔记】Binary Tree Preorder Traversal的更多相关文章

  1. [刷题] 144 Binary Tree Preorder Traversal

    要求 二叉树的前序遍历 实现 递归 栈模拟          定义结构体 Command 模拟指令,字符串s描述命令,树节点node为指令作用的节点 定义栈 Stack 存储命令 1 #include ...

  2. 刷题94. Binary Tree Inorder Traversal

    一.题目说明 题目94. Binary Tree Inorder Traversal,给一个二叉树,返回中序遍历序列.题目难度是Medium! 二.我的解答 用递归遍历,学过数据结构的应该都可以实现. ...

  3. LeetCode之“树”:Binary Tree Preorder && Inorder && Postorder Traversal

    Binary Tree Preorder Traversal 题目链接 题目要求: Given a binary tree, return the preorder traversal of its ...

  4. Binary Tree Preorder Traversal on LeetCode in Java

    二叉树的非递归前序遍历,大抵是很多人信手拈来.不屑一顾的题目罢.然而因为本人记性不好.基础太差的缘故,做这道题的时候居然自己琢磨出了一种解法,虽然谈不上创新,但简单一搜也未发现雷同,权且记录,希望于人 ...

  5. C++版 - LeetCode 144. Binary Tree Preorder Traversal (二叉树先根序遍历,非递归)

    144. Binary Tree Preorder Traversal Difficulty: Medium Given a binary tree, return the preorder trav ...

  6. LeetCode 144. 二叉树的前序遍历(Binary Tree Preorder Traversal)

    144. 二叉树的前序遍历 144. Binary Tree Preorder Traversal 题目描述 给定一个二叉树,返回它的 前序 遍历. LeetCode144. Binary Tree ...

  7. 【LeetCode】Binary Tree Preorder Traversal

    Binary Tree Preorder Traversal Given a binary tree, return the preorder traversal of its nodes' valu ...

  8. 【LeetCode】144. Binary Tree Preorder Traversal (3 solutions)

    Binary Tree Preorder Traversal Given a binary tree, return the preorder traversal of its nodes' valu ...

  9. LeetCode: Binary Tree Preorder Traversal 解题报告

    Binary Tree Preorder Traversal Given a binary tree, return the preorder traversal of its nodes' valu ...

  10. 12. Binary Tree Postorder Traversal && Binary Tree Preorder Traversal

    详见:剑指 Offer 题目汇总索引:第6题 Binary Tree Postorder Traversal            Given a binary tree, return the po ...

随机推荐

  1. 百度js 获取定位城市名称

    首先引用百度 script <script type="text/javascript" src="http://api.map.baidu.com/api?typ ...

  2. Hive优化策略

    hive优化目标 在有限的资源下,运行效率高. 常见问题 数据倾斜.Map数设置.Reduce数设置等 hive运行 查看运行计划 explain [extended] hql 例子 explain ...

  3. hdu 4112 Break the Chocolate(乱搞题)

    题意:要把一块n*m*k的巧克力分成1*1*1的单元,有两种操作方式:1,用手掰(假设力量无穷大),每次拿起一块,掰成两块小的:2,用刀切(假设刀无限长),可以把多块摆在一起,同时切开.问两种方式各需 ...

  4. ansible的异步执行

    ansible任务的异步执行 96 茶客furu声 关注 2016.07.12 01:40* 字数 458 阅读 1777评论 0喜欢 4 ansible方便在于能批量下发,并返回结果和呈现.简单.高 ...

  5. php 获取文件加的名称

    /*** * 根本平台类型获取文件名 */ function showGetFileName($type,$url){ #判断平台类型 if($type=='android'||$type=='ios ...

  6. resin 4.0 项目的配置

    前一篇我们了解了resin中配置数据源,依照不同项目的要求我们进行数据源的配置,如多个项目共享多个数据源,一个项目配置多个数据源,以下我们来看看项目的部署方式: 1.在一个host(虚拟主机)下配置一 ...

  7. 在Hierarchy面板隐藏物体

    PlantObjPreview.hideFlags = HideFlags.HideInHierarchy;

  8. Cocos2d-x中使用第三方so库

    项目中假设使用到第三方的SDK,大多数是以.so动态共享库的文件打包给我们使用.怎样使用他们,见以下分析. 1.获得库文件 假如我们得到的库文件是libxxx.so(注:关于.so文件的命名方式,可百 ...

  9. uitableview滚动到最后一行

    本文转载至 http://mrjeye.iteye.com/blog/1278521 - (void)scrollTableToFoot:(BOOL)animated { NSInteger s = ...

  10. 手机touch事件

    touchstart:触摸开始的时候触发 touchmove:手指在屏幕上滑动的时候触发 touchend:触摸结束的时候触发 而每个触摸事件都包括了三个触摸列表,每个列表里包含了对应的一系列触摸点( ...