zoukankan      html  css  js  c++  java
  • 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?

    思路:

    要求递归实现,所以引入一个栈。又因为避免重复进入已访问的节点,所以用pair来记录某个节点是否被访问。

    代码:

     1     vector<int> preorderTraversal(TreeNode *root) {
     2         // IMPORTANT: Please reset any member data you declared, as
     3         // the same Solution instance will be reused for each test case.
     4         stack<pair<TreeNode*, bool> > s;
     5         vector<int> result;
     6         if(root == NULL)
     7             return result;
     8         s.push(pair<TreeNode*, bool>(root, false));
     9         pair<TreeNode*, bool> tPair;
    10         TreeNode* tNode;
    11         bool hasVisited;
    12         while(!s.empty()){
    13             tPair = s.top();
    14             tNode = tPair.first;
    15             hasVisited = tPair.second;
    16             if(hasVisited){
    17                 s.pop();
    18                 if(tNode->right != NULL)
    19                     s.push(pair<TreeNode*, bool>(tNode->right, false));
    20             }
    21             else{
    22                 s.pop();
    23                 s.push(pair<TreeNode*, bool>(tNode, true));
    24                 result.push_back(tNode->val);
    25                 if(tNode->left != NULL)
    26                     s.push(pair<TreeNode*, bool>(tNode->left, false));
    27             }
    28         }
    29         return result;
    30     }
  • 相关阅读:
    去除字符串中多余空格
    day02-03 字符编码
    eclipse与myeclipse区别
    xz解压和zip解压
    yum安装
    防火墙
    查看和操作HBA卡
    复制linux虚拟机后网卡不能用的解决方法
    关闭IPv6
    更改root密码
  • 原文地址:https://www.cnblogs.com/waruzhi/p/3410946.html
Copyright © 2011-2022 走看看