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

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

  1. 1
  2. \
  3. 2
  4. /
  5. 3

return [1,2,3].

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

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

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

主要纠结在两个地方:

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

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

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

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

代码如下:

  1. /**
  2. * Definition for binary tree
  3. * struct TreeNode {
  4. * int val;
  5. * TreeNode *left;
  6. * TreeNode *right;
  7. * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
  8. * };
  9. */
  10. #include <iostream>
  11. #include <stack>
  12. #include <vector>
  13. #include <cstdlib>
  14. using namespace std;
  15. struct TreeNode {
  16. int val;
  17. TreeNode *left;
  18. TreeNode *right;
  19. TreeNode(int x) : val(x), left(NULL), right(NULL) {}
  20. };
  21. class Solution {
  22. public:
  23. vector<int> preorderTraversal(TreeNode *root) {
  24. stack<TreeNode*>s;
  25. vector<int>ans;
  26. if(root == NULL)
  27. return ans;
  28. s.push(root);
  29. while(!s.empty()){
  30. struct TreeNode* temp = s.top();
  31. s.pop();
  32. ans.push_back(temp->val);
  33. if(temp->right != NULL)
  34. s.push(temp->right);
  35. if(temp->left != NULL){
  36. s.push(temp->left);
  37. }
  38. }
  39. return ans;
  40. }
  41. };
  42. int main(){
  43. Solution so;
  44. struct TreeNode* root = (struct TreeNode*)malloc(sizeof(struct TreeNode));
  45. struct TreeNode* root_l_c = (struct TreeNode*)malloc(sizeof(struct TreeNode));
  46.  
  47. root->val = ;
  48. root_l_c->val = ;
  49.  
  50. root_l_c->left = NULL;
  51. root_l_c->right = NULL;
  52.  
  53. root->right = NULL;
  54. root->left = root_l_c;
  55. //cout << root->left->val<<endl;
  56. so.preorderTraversal(root);
  57. }

Java版本递归解法:

  1. public class Solution {
  2. public List<Integer> preorderTraversal(TreeNode root) {
  3. List<Integer> answer = new ArrayList<>();
  4. return preorderTraversalHelper(answer, root);
  5. }
  6. public List<Integer> preorderTraversalHelper(List<Integer> answer,TreeNode root) {
  7. if(root == null)
  8. return answer;
  9. answer.add(root.val);
  10. answer = preorderTraversalHelper(answer,root.left);
  11. answer = preorderTraversalHelper(answer,root.right);
  12. return answer;
  13. }
  14. }

一个小笔记是在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. SQL 怎样 远程备份数据库到本地

    SQL 怎样 远程备份数据库到本地 --1.启用xp_cmdshell USE master EXEC sp_configure 'show advanced options', 1 RECONFIG ...

  2. Docker URL REST API访问设置

    Docker daemon 绑定到该端口上. 默认情况下,docker daemon使用unix socket(unix:///var/run/docker.sock) 1.先停止docker dae ...

  3. create table #temptable 临时表 和 declare @bianliang table ()表变量

    create table #temptable 临时表 和 declare @bianliang table ()表变量 在开发过程中,经常会遇到使用表变量和本地临时表的情况.下面是对二者的一个介绍: ...

  4. 莫小安 CentOS7使用firewalld打开关闭防火墙与端口

    1.firewalld的基本使用 启动: systemctl start firewalld 查看状态: systemctl status firewalld  停止: systemctl disab ...

  5. 安装MacOS到虚拟机

    [TOC] 系统版本历史 4. 升级系统到10.12.6版本 时间:2017年9月21日 15:58:55 大小:VMDK(7.63 GB) 变动: 升级系统到10.12.6版本 3. 降低内存到6G ...

  6. mac上搭建docker镜像私服

    1.创建私服容器 docker run -d -e SETTINGS_FLAVOR=dev -e STORAGE_PATH=/tmp/registry -v /opt/data/registry:/t ...

  7. Dijkstra 算法——计算有权最短路径(边有权值)

    [0]README 0.1) 本文总结于 数据结构与算法分析, 源代码均为原创, 旨在理解 Dijkstra 的思想并用源代码加以实现: 0.2)最短路径算法的基础知识,参见 http://blog. ...

  8. zookeeper的python客户端安装

    项目中使用了python,需要使用到zookeeper的功能,这里记录一下安装过程. 内核版本:2.6.32 发行版:CentOs-6.6 64bit 1.由于python客户端依赖c的客户端所以要先 ...

  9. 算不算类似微信小程序

    这几天微信发布的微信里生成小程序,刷爆了朋友圈. 微信生成的小程序不用下载安装就能在手机里出现,即用即删. 想到这里,我想到苹果手机本身再带类似于微信的小程序的呈现方式,也可以即用即删,那是我在去年久 ...

  10. MySQL的基本操作--第一弹

    前言:在听许嵩,忆当年,意气风发 ———————————————————————————————————————————————— 好了,今天和大家同步讲解mysql的知识了.都是最基本的知识. 一. ...