题不难,一般为模板题
1.前序遍历(中左右)
2.中序遍历(左中右)
3.后序遍历(左右中)
(1,2,3本质上是我们常说的深度优先搜素)
4.层序遍历
(本质上是我们常说的广度优先搜素)
代码方面:(leetcode收藏夹里面有对应的题)真的很好
1.前序遍历2.中序遍历3.后序遍历建议用递归写(因为递归代码比较统一,迭代写记忆麻烦)
4.层序遍历.建议用队列来实现(代码不难理解,然后对应不同的题进修改也比较方便)
class Solution {
public:
void traversal(TreeNode* cur, vector<int>& result){
if(cur == NULL) return;
result.push_back(cur->val);
traversal(cur->left,result);
traversal(cur->right,result);
}
vector<int> preorderTraversal(TreeNode* root) {
vector<int> result;
traversal(root, result);
return result;
}
};
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
queue<TreeNode*> que;
vector<vector<int>> ans;//看题目的需求来改
if(root != NULL) que.push(root);
while(!que.empty()){
int size = que.size();
vector<int> result;
for(int i = 0; i < size; i++){
TreeNode* node = que.front();
que.pop();
result.push_back(node->val);
if(node->left) que.push(node->left);
if(node->right) que.push(node->right);
}
ans.push_back(result);
}
return ans;
}
};
层序遍历的本质:1.创建队列 2.判断根节点是否为零 3.从根点开始,将二叉树的每一层节点从左到右依次放入队列中,然后用TreeNode* node(先指向,然后弹出,然后)对他们一一操作.
如果对前序遍历,中序遍历,后序遍历理解不够深刻的,可以去CSDN的收藏夹里面看图解