原题:
Given a binary tree, return the preorder traversal of its nodes' values.
For example:
Given binary tree {1,#,2,3}
,
return [1,2,3]
.
二叉树的先序遍历,用递归很简单,就是由于需要返回一个vector的结果,因此在开始调用的时候传一个vector进去,这里只接收地址。。。。
代码(20ms):
class Solution {
public:
vector<int> preorderTraversal(TreeNode *root) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
vector<int> result;
preTravle(root, result);
return result;
}
void preTravle(TreeNode *root , vector<int>&result){
if(root == NULL) return;
result.push_back(root->val);
if(root->left) preTravle(root->left , result);
if(root->right) preTravle(root->right , result);
return;
}
};
非递归方法:(24 ms):
非递归自然想到了栈,由于先序遍历是根-左-右,因此在压栈的时候需要注意是先入栈右节点,再入左节点。
class Solution {
public:
vector<int> preorderTraversal(TreeNode *root) {
// IMPORTANT: Please reset any member data you declared, as
// the same Solution instance will be reused for each test case.
vector<int> result;
if(!root) return result;
stack<TreeNode*>s;
s.push(root);
//当栈不为空,循环
while(!s.empty()){
TreeNode*current = s.top();
s.pop();
//把当前节点的值压入vector中
result.push_back(current->val);
//先入右节点
if(current->right) s.push(current->right);
if(current->left) s.push(current->left);
}
return result;
}
};