スタックとキュー:ツリーの前順ループ


ツリーの前順遍歴
タイトル:二叉木の前序遍歴を二つの方法で実現する
方法1:再帰
void preOrder(TreeNode *root)
{
    if(root == NULL)
        return;
    visit(root);
    preOrder(root->left);
    preOrder(root->right);
}

方法2:スタックで前シーケンスループを実現する
vector preOrder(TreeNode *root)
{
    vector result;
    stack helper;
    if(root == NULL)    return result;

    while(root || !helper.empty())
    {
        if(root)
        {
            result.push(root->val);
            helper.push(root);
            root = root->left;
        }else{
            root = helper.top();
            helper.pop();
            root = root->right;
        }
    }

    return result;
}