一.题目描述
给出一棵二叉树,返回其节点值的前序遍历。
样例
给出一棵二叉树 {1,#,2,3}
,
1
\
2
/
3
返回 [1,2,3]
.
二.解题思路
给出一棵二叉树 {1,#,2,3}
,
1 \ 2 / 3
返回 [1,2,3]
.
因为函数返回类型是向量容器,所以定义一个int类型的vector,如果节点是空节点,则直接返回容器,否则,就将根节点的值插在向量容器的末尾,再用递归的方法遍历左子树和右子树,依次将值用push_back函数放在容器的尾端。
三.实现代码
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param root: The root of binary tree.
* @return: Preorder in vector which contains node values.
*/
vector<int> preorderTraversal(TreeNode *root) {
// write your code here
vector<int> a;
if(root==NULL) return a;
preorder(a,root);
return a;}
void preorder(vector<int> &a,TreeNode *root)
{ if(root==NULL) return;
a.push_back(root->val);
preorder(a,root->left);
preorder(a,root->right);
}
};
四.感悟
为了防止每次递归时都定义一个新的向量容器,需要重新定义一个函数,递归调用时调用新函数,并且新函数的参数中向量要用传引用的方式,否则返回的是空向量。