zoukankan      html  css  js  c++  java
  • 【leetcode刷题笔记】Binary Tree Preorder Traversal

    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到一个变量中,再继续后续操作。

    代码如下:

     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 = 2;
    48     root_l_c->val = 3;
    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; 

  • 相关阅读:
    redis 一主二从三哨兵
    java 调用axis2 webservice
    oracle 自增ID
    yum安装命令的使用方法
    SLES 10安装Oracle10gR2笔记
    信息系统集成资质等级评定条件(暂行)
    ionic imgBase64
    IOS 断点下载
    IOS JSON
    citrix更换vcenter后所需改动几张表
  • 原文地址:https://www.cnblogs.com/sunshineatnoon/p/3640898.html
Copyright © 2011-2022 走看看