LeetCode 144: Binary Tree Preorder Traversal 解题与思考

来源:互联网 发布:jdbc连接数据库5个步骤 编辑:程序博客网 时间:2024/06/06 02:39

LeetCode 144: Binary Tree Preorder Traversal 解题与思考

[原题链接]

题目描述

实现非递归的树的前序遍历

思路

当然也还是和之前的后序遍历一样要用到栈,而最好的地方就是当前节点访问完就可以立即输出。

不过当前节点还是要依次压栈的,因为你还要通过栈内的点来确定什么时候访问它的右子树。

算法

前期准备:一个节点栈,一个答案数组
1、对于一个节点,将其入栈,并且将其加入答案数组,将当前节点设为其左子节点
2、当前节点为空,若

  • 栈顶节点无右子节点
    那么其为一个叶子节点,直接将栈顶元素出栈

  • 栈顶节点有右子节点
    那么就将当前节点设为该右子节点,并将栈顶元素出栈

代码

class Solution {public:    vector<int> preorderTraversal(TreeNode* root) {        TreeNode *nowNode = root;        vector<int> result;        stack<TreeNode*> treeStack;        while ( nowNode || !treeStack.empty() ) {            if ( nowNode ) {                result.push_back(nowNode->val);                treeStack.push(nowNode);                nowNode = nowNode->left;            }            else {                TreeNode *topNode = treeStack.top();                if ( topNode->right /*&& lastNode != topNode */ ) {                    nowNode = topNode->right;                    treeStack.pop();                }                else {                    treeStack.pop();                }            }        }        return result;    }};

思考

相比后序遍历,简直没有难度,也没什么好说的了

原创粉丝点击