- 描述:
Given a binary tree, return the preorder traversal of its nodes’ values.
For example:
Given binary tree [1,null,2,3],
tree:
1 \ 2 / 3
return [1,2,3].
- 分析:前序遍历二叉树。
- 思路一:递归。
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
if (root) {
my_res.push_back(root -> val);
preorderTraversal(root -> left);
preorderTraversal(root -> right);
}
return my_res;
}
private:
vector<int> my_res;
};
- 思路二:非递归。
使用一个栈来存储数的节点,栈非空就可以继续查找,知道栈为空,需要注意的是应该是右子树先入栈,左子树后入栈,原因是由栈的特性决定的(FILO),先要访问左子树,因此应当把左子树放在栈顶。
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> res;
if (!root) return res;
vector<TreeNode*> my_stack;
my_stack.push_back(root);
while (!my_stack.empty()) {
TreeNode* temp = my_stack.back();
my_stack.pop_back();
res.push_back(temp -> val);
if (temp -> right) my_stack.push_back(temp -> right);
if (temp -> left) my_stack.push_back(temp -> left);
}
return res;
}
};