当前位置:首页 > 编程笔记 > 正文
已解决

二叉树oj题集(LeetCode)

来自网友在路上 184884提问 提问时间:2023-11-19 21:47:01阅读次数: 84

最佳答案 问答题库848位专家为你答疑解惑

100. 相同的树 

关于树的递归问题,永远考虑两方面:返回条件和子问题

  1. 先考虑返回条件,如果当前的根节点不相同,那就返回false(注意,不要判断相等时返回什么,因为当前相等并不能说明后面节点相等,所以要转换为不相等返回什么)
  2. 但是还要考虑为空的情况,如果两个树的根节点都为空,则返回true(只有经过层层比较,当比较到最后都为空树时,才返回true);如果一个为空一个不为空,则返回false
  3. 最后考虑子问题,当前树的根节点比较完毕,那就转化为左子树和右子树进行递归比较 
bool isSameTree(struct TreeNode* p, struct TreeNode* q)
{if (p == NULL && q == NULL){return true;}if (p == NULL || q == NULL){return false;}if (p->val != q->val){return false;}return isSameTree(p->left, q->left)&& isSameTree(p->right, q->right);
}

965. 单值二叉树 

思路:判断单值的条件,就是让父节点的值与两个孩子的值相等 

具体方法:

  • 如果为空树,则返回true(必然走到末尾,那前面的值判断都通过)
  • 当前节点与左孩子的值进行比较,如果不相等,则返回false(注意,加上条件判断,保证左孩子不为空,防止对空指针的解引用)
  • 同理,当前节点与右孩子的值进行比较,如果不相等,则返回false
  • 最后的子问题,则返回左子树与右子树的返回值的逻辑与,只要不满足上述条件,就一直往下递归
bool isUnivalTree(struct TreeNode* root)
{if (root == NULL){return true;}if (root->left && root->val != root->left->val){return false;}if (root->right && root->val != root->right->val){return false;}return isUnivalTree(root->left)&& isUnivalTree(root->right);
}

101. 对称二叉树

 思路:因为要用左子树的左支(右支)和右子树的右支(左支)进行比较,所以再创建一个子函数接受两个参数。

具体方法:

  1. 如果左右子树根节点都为NULL,则返回true
  2. 如果左右子树根节点一个为空一个不为空,则返回false
  3. 如果左右子树根节点非空,并且不相等,则返回false
  4. 子问题划分为,左子树的左支与右子树的右支相比,左子树的右支与右子树的左支相比,检查是否对称,如果都对称,则返回true
bool _isSymmetric(struct TreeNode* left, struct TreeNode* right)
{if (left == NULL && right == NULL){return true;}if (left == NULL || right == NULL){return false;}if (left->val != right->val){return false;}return _isSymmetric(left->left, right->right)&& _isSymmetric(left->right, right->left);
}bool isSymmetric(struct TreeNode* root)
{return _isSymmetric(root->left, root->right);
}

 

查看全文

99%的人还看了

猜你感兴趣

版权申明

本文"二叉树oj题集(LeetCode)":http://eshow365.cn/6-39681-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!