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. 二叉树的堂兄弟节点