劍指Offer-第6天 搜尋與回溯演算法(簡單)
阿新 • • 發佈:2022-05-08
第一題
題目連結:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof/
個人題解:BFS即可
程式碼:
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<int> levelOrder(TreeNode* root) { vector<int> res; if(!root) return {}; queue<TreeNode*> q; q.push(root); while(!q.empty()){ auto t=q.front(); q.pop(); res.push_back(t->val); if(t->left) q.push(t->left); if(t->right) q.push(t->right); } return res; } };
執行截圖:
第二題
題目連結:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-ii-lcof/
個人題解:開二維陣列,每次填入空的一維陣列,重複第一題的操作即可。
程式碼:
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} * }; */ class Solution { public: vector<vector<int>> levelOrder(TreeNode* root) { vector<vector<int>> res; if(!root) return res; queue<TreeNode*> q; q.push(root); while(!q.empty()) { int n=q.size(); res.push_back(vector<int>()); for(int i=1;i<=n;i++) { auto t=q.front(); q.pop(); res.back().push_back(t->val); if(t->left) q.push(t->left); if(t->right) q.push(t->right); } } return res; } };
執行截圖:
第三題
題目連結:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-iii-lcof/
個人題解:設定一個 \(idx\),偶數的時候反轉陣列即可,其他操作和第二題一樣。
程式碼:
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<vector<int>> levelOrder(TreeNode* root) { vector<vector<int>> res; if(!root) return res; queue<TreeNode*> q; q.push(root); int i=1; while(q.size()){ int len=q.size(); vector<int> lev; for(int j=0;j<len;j++){ auto t=q.front(); q.pop(); lev.push_back(t->val); if(t->left) q.push(t->left); if(t->right) q.push(t->right); } if(i%2==0) reverse(lev.begin(),lev.end()); res.push_back(lev); i++; } return res; } };
執行截圖: