题不难,一般为模板题

1.前序遍历(中左右)
2.中序遍历(左中右)
3.后序遍历(左右中)
(1,2,3本质上是我们常说的深度优先搜素)
4.层序遍历
(本质上是我们常说的广度优先搜素)

代码方面:(leetcode收藏夹里面有对应的题)真的很好
1.前序遍历2.中序遍历3.后序遍历建议用递归写(因为递归代码比较统一,迭代写记忆麻烦)
4.层序遍历.建议用队列来实现(代码不难理解,然后对应不同的题进修改也比较方便)

  1. class Solution {
  2. public:
  3. void traversal(TreeNode* cur, vector<int>& result){
  4. if(cur == NULL) return;
  5. result.push_back(cur->val);
  6. traversal(cur->left,result);
  7. traversal(cur->right,result);
  8. }
  9. vector<int> preorderTraversal(TreeNode* root) {
  10. vector<int> result;
  11. traversal(root, result);
  12. return result;
  13. }
  14. };
  1. class Solution {
  2. public:
  3. vector<vector<int>> levelOrder(TreeNode* root) {
  4. queue<TreeNode*> que;
  5. vector<vector<int>> ans;//看题目的需求来改
  6. if(root != NULL) que.push(root);
  7. while(!que.empty()){
  8. int size = que.size();
  9. vector<int> result;
  10. for(int i = 0; i < size; i++){
  11. TreeNode* node = que.front();
  12. que.pop();
  13. result.push_back(node->val);
  14. if(node->left) que.push(node->left);
  15. if(node->right) que.push(node->right);
  16. }
  17. ans.push_back(result);
  18. }
  19. return ans;
  20. }
  21. };

层序遍历的本质:1.创建队列 2.判断根节点是否为零 3.从根点开始,将二叉树的每一层节点从左到右依次放入队列中,然后用TreeNode* node(先指向,然后弹出,然后)对他们一一操作.

如果对前序遍历,中序遍历,后序遍历理解不够深刻的,可以去CSDN的收藏夹里面看图解