d为什么树有前,中,后序遍历,
我们知道我们电脑的内存存储是线性的,而有些问题是非线性的,我们设计了一种树来表示这种问题,然后我们要如何存储呢,答案就是把非线性的转化成线性的,这里就出来了,前中后序遍历,把非线型的树转化成线性的序列。
看到最后其实先中后分别也就是先中后访问根节点。
这里每次treenode*a表示一个指针,指向了一个树的节点,代表一个节点。
这里我们可以用递归法,递归每个节点
遍历根节点就是把他放入答案数组中,遍历左右子树就是递归搜索,这里当尾空节点是就跳出递归
前序:
class Solution {
public:
void traversal(TreeNode* cur, vector<int>& vec) {
if (cur == NULL) return;
vec.push_back(cur->val); // 中
traversal(cur->left, vec); // 左
traversal(cur->right, vec); // 右
}
vector<int> preorderTraversal(TreeNode* root) {
vector<int> result;
traversal(root, result);
return result;
}
};
void traversal(TreeNode* cur, vector<int>& vec) {
if (cur == NULL) return;
traversal(cur->left, vec); // 左
vec.push_back(cur->val); // 中
traversal(cur->right, vec); // 右
}
void traversal(TreeNode* cur, vector<int>& vec) {
if (cur == NULL) return;
traversal(cur->left, vec); // 左
traversal(cur->right, vec); // 右
vec.push_back(cur->val); // 中
}
这是经典的递归写法,还有种迭代写法,是必须掌握的,