LeetCode 993 二叉树的堂兄弟节点[DFS 回溯] HERODING的LeetCode之路

Posted HERODING23

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 993 二叉树的堂兄弟节点[DFS 回溯] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。

在这里插入图片描述在这里插入图片描述解题思路:
对于深度的搜索,即可以用广度优先,也可以使用深度优先,都特别适用这些场合,但是在使用深搜的时候,要注意回溯,因为深度不能是一直往下,在切换左右深度的时候对深度要回到之前的状态,代码如下:

/**
 * 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 {
private:
    // 定义两个数值的深度,父节点的值
    int depth1, depth2, data1, data2;
public:
    void dfs(TreeNode* root, int depth, int data, int num1, int num2) {
        // 节点为空
        if(root == nullptr) {
            return;
        }
        // 等于第一个节点的值
        if(root -> val == num1) {
            depth1 = depth;
            data1 = data;
        } else if (root -> val == num2) {// 等于第二个节点的值
            depth2 = depth;
            data2 = data;
        }
        // 向左
        dfs(root -> left, ++ depth, root -> val, num1, num2);
        // 回溯
        depth--;
        // 向右
        dfs(root -> right, ++ depth, root -> val, num1, num2);
    }

    bool isCousins(TreeNode* root, int x, int y) {
        dfs(root, 0, root -> val, x, y);
        return (depth1 == depth2 && data1 != data2);
    }
};


/*作者:heroding
链接:https://leetcode-cn.com/problems/cousins-in-binary-tree/solution/chui-su-by-heroding-vloa/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。*/

以上是关于LeetCode 993 二叉树的堂兄弟节点[DFS 回溯] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章

⭐算法入门⭐《二叉树》简单07 —— LeetCode 993. 二叉树的堂兄弟节点

追求最优美的代码 leetcode 993. 二叉树的堂兄弟节点

追求最优美的代码 leetcode 993. 二叉树的堂兄弟节点

LeetCode 993. 二叉树的堂兄弟节点

[LeetCode]993. 二叉树的堂兄弟节点(Java/c++ DFS)

[LeetCode]993. 二叉树的堂兄弟节点(Java/c++ DFS)