题不难,一般为模板题
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的收藏夹里面看图解
