LeetCode刷题——分支限界法(C/C++)

本文介绍了几种二叉树的算法问题,包括判断对称二叉树、二叉树的层序遍历、求二叉树的最小深度、检查平衡二叉树以及通过分支限界法和回溯法解决的岛屿数量问题。这些算法主要涉及深度优先和广度优先搜索策略。


分支限界法与回溯法的不同
(1)求解目标:回溯法的求解目标是找出解空间树中满足约束条件的所有解,而分支限界法的求解目标则是找出满足约束条件的一个解,或是在满足约束条件的解中找出在某种意义下的最优解。
(2)搜索方式的不同:回溯法以深度优先的方式搜索解空间树,而分支限界法则以广度优先或以最小耗费优先的方式搜索解空间树。

[简单]101. 对称二叉树

  • 原题链接
  • 题解
    比较基础的递归思想,按照对称点的方式递归,递归函数中,第一个参数是左半边的点,第二个参数是右半边的对称点,因此,进入子节点递归的时候,左半边的点进入其左孩子时,右半边的对称点要进入其右孩子,左半边的点进入其右孩子时,右半边的对称点要进入其左孩子。
/**
 * 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:
    bool isSymmetric(TreeNode* root) {
   
   
        if(root == nullptr) return true;
        return recursion(root->left,root->right);
    }
    bool recursion(TreeNode* left, TreeNode* right){
   
   
        if(left == nullptr && right == nullptr) return true;
        else if(left == nullptr || right == nullptr) return false;
        if(left->val != right->val) return false;
        if(!recursion(left->left,right->right)) return false;
        if(!recursion(left->right,right->left)) return false;
        return true;
    }
};

[简单]102. 二叉树的层序遍历

  • 原题链接
  • 题解
    经典的借助队列进行层序遍历的思路,在while循环中再加一层for循环,来区别每一层的节点即可
/**
 * 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) {
   
   
        queue<TreeNode*>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值