栈实现先序遍历

题目:

先序顺序:根左右

For example:                                                                                                                                                                 Given a binary tree, return the preorder traversal of its nodes' values.                                                                           Given binary tree{1,#,2,3},                                                                                                                                            

   1
    \
     2
    /
   3

return[1,2,3].                                                                                                                                                                                                            Note: Recursive solution is trivial, could you do it iteratively?                                                                                                                                   

解题思路:

根遍历,拿到一个节点的指针,先判断是否为空,不为空就先访问该结点,然后直接进栈,接着遍历左子树;为空则要从栈中弹出一个节点来,这个时候弹出的结点就是其父亲,然后访问其父亲的右子树,直到当前节点为空且栈为空时,算法结束.

代码:

/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    vector preorderTraversal(TreeNode *root) {
       vector ret;
        stack st;
        if (root == NULL){
            return ret;
        }
        st.push(root);
        while (!st.empty()){
            TreeNode *p = st.top();
            st.pop();
            ret.push_back(p->val);
            if (p->right!=NULL)
                st.push(p->right);
            if (p->left!=NULL)
                st.push(p->left);
        }
        return ret;
    }
};

你可能感兴趣的:(栈实现先序遍历)