题目:
样例
给出一棵二叉树 {1,#,2,3}
,
1 \ 2 / 3
返回 [1,2,3]
.
思路:
首先在函数的外面建立一个独立的向量,用于储存遍历过的元素,最终返回向量。前序遍历是先遍历根节点,将根节点的值放入向量中,再遍历根节点的左子数最遍历右子数,遍历后将节点的数值val放入之前建立的向量中。在遍历左子数和右子数时重复前面的步骤,所以运用递归的思想重复相同的步骤。大问题和小问题的解决方式相同。
代码:
class Solution {
public:
/**
* @param root: The root of binary tree.
* @return: Preorder in vector which contains node values.
*/
std::vector<int> c;
vector<int> preorderTraversal(TreeNode *root)
{
// write your code here
if(root)
{
c.push_back(root->val);
if(root->left!=NULL)
preorderTraversal(root->left);
if(root->right!=NULL)
preorderTraversal(root->right);
}
return c;
}
};
感想:
这个题的新的地方在于放回的是向量,将遍历的数据按顺序放入向量中,最后放回向量的值。if(root)这个地方是我在这个题中学到的一种处理方式。也可以是if(root==NULL) return c;是一样的表达。