您的位置:首页 > 其它

[LeetCode] Binary Tree Preorder Traversal, Solution

2013-11-26 13:42 337 查看
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?
[Thoughts]
PreOrder:
1. visit node
2. visit node->left
3. visit node->right
对于递归的解法很清晰,
function preorder(root)

if root == NULL return;
print root;
preoder(node->left);
preOrder(node->right);


将该递归函数转换成非递归的话,一般都要借助于栈。



[code]1:  vector<int> preorderTraversal(TreeNode *root) {
2:       stack<TreeNode*> tStack;
3:       vector<int> result;
4:       while(tStack.size()>0 || root != NULL)
5:       {
6:            if(root != NULL)
7:            {
8:                 result.push_back(root->val);
9:                 if(root->right !=NULL)
10:                 tStack.push(root->right);
11:                 root = root->left;
12:            }
13:            else
14:            {
15:                 root = tStack.top();
16:                 tStack.pop();
17:            }
18:       }
19:       return result;
20:  }


Update 08/20/2014. Another way to use stack

1:       vector<int> preorderTraversal(TreeNode *root) {
2:            stack<TreeNode*> stack;
3:            vector<int> result;
4:            TreeNode* cur = root;
5:            while(cur != NULL || stack.size() != 0)
6:            {
7:                 while(cur != NULL)
8:                 {
9:                      result.push_back(cur->val);
10:                      stack.push(cur);
11:                      cur = cur->left;
12:                 }
13:                 cur = stack.top();
14:                 stack.pop();
15:                 cur = cur->right;
16:            }
17:            return result;
18:       }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: