分支限界法
-
- 1、目标
- 2、方法
- 3、具体实现
- 4、例题:
-
- 1、练广度优先遍历的基础
-
- (1)力扣:[剑指 Offer 32 - I. 从上到下打印二叉树](https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-lcof/)
- (2)[力扣:剑指 Offer 32 - II. 从上到下打印二叉树 II](https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-ii-lcof/)
- (2)[力扣:剑指 Offer 32 - III. 从上到下打印二叉树 III](https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-iii-lcof/)
- 2、使用广度优先遍历
1、目标
找到在约束条件下的最优解
2、方法
以广度优先或以最小耗费优先的方式搜索解空间树。
3、具体实现
在分支限界法中,每个活的结点都有一次机会成为扩展结点,一次性产生其所有儿子结点。不合适的儿子结点被淘汰,只留下合适的进入队列,之前的出队列。个人感觉这个就是BFS,有其他理解可以讨论下。
4、例题:
建议各位手写一下,虽然是个人笔记,也希望对网友有作用吧。
1、练广度优先遍历的基础
(1)力扣:剑指 Offer 32 - I. 从上到下打印二叉树
/**
* 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) {
if(!root) return {
};
queue<TreeNode *> mes;
vector<int> answer;
mes.push(root);
while(!mes.empty()){
TreeNode * node = mes.front();
mes.pop();
if(node->left) mes.push(node->left);
if(node->right) mes.push(node->right);
answer.push_back(node->val);
}
return answer;
}
}<