您的位置:首页 > 其它

LeetCode:Binary Tree Preorder Traversal(二叉树的先序遍历)

2015-08-12 11:12 537 查看
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]
.

解法一:用栈实现(递归本质)

/**
* Definition for a binary tree node.
* struct TreeNode {
*     int val;
*     TreeNode *left;
*     TreeNode *right;
*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> result;
stack<TreeNode *> node_stack;
if(root!=NULL)
node_stack.push(root);
TreeNode *node;

while(!node_stack.empty())
{
node=node_stack.top();
result.push_back(node->val);
node_stack.pop();

if(node->right!=NULL) node_stack.push(node->right);
if(node->left!=NULL) node_stack.push(node->left);
}

return result;

}
};


解法二:递归方式

/**
* Definition for a binary tree node.
* struct TreeNode {
*     int val;
*     TreeNode *left;
*     TreeNode *right;
*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> result;
preorder(root,result);
return result;

}
void preorder(TreeNode *node,vector<int> &result)
{
if(node!=NULL)
{
result.push_back(node->val);
preorder(node->left,result);
preorder(node->right,result);
}

}
};


解法三:morris遍历方式 有待更新。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: