66. 二叉树的前序遍历
给出一棵二叉树,返回其节点值的前序遍历
样例
给出一棵二叉树 {1,#,2,3}
,
1 \ 2 / 3
返回 [1,2,3]
.
挑战
你能使用非递归实现么?
vector<int> a;
vector<int> preorderTraversal(TreeNode * root) {
// write your code here
if(root==NULL){return a;}
a.push_back(root->val);
if(root->left!=NULL){
preorderTraversal(root->left);
}
if(root->right!=NULL){
preorderTraversal(root->right);
}
return a;
}
改进后
vector<int> a;
vector<int> preorderTraversal(TreeNode * root) {
// write your code here
if(root==NULL){return a;}
else{
a.push_back(root->val);
preorderTraversal(root->left);
preorderTraversal(root->right);
}
return a;
}
非递归方法
vector<int> preorderTraversal(TreeNode * root) {
// write your code here
int top=-1;
vector<int> a;
TreeNode * s[1000];
while(root!=NULL || top!=-1){
while(root!=NULL){
a.push_back(root->val);
s[++top]=root;
root=root->left;
}
if(top!=-1){
root = s[top--];
root=root->right;
}
}
return a;
}