ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

965.单值二叉树

965.单值二叉树 目录一题目二思路三代码四递归展开图一题目解释单值二叉树就是指的节点值全相等的二叉树所以即使是空树也是单值二叉树二思路单值二叉树的递归“大事化小”思路就是既然单值二叉树树的每个节点值相等则我们只需要递归检查每个节点和它的左右孩子值是否相等即可所以判断当前节点和它的左右孩子值是否相等这是“大事”中的第一步小事但这一步做完后问题并没有结束因为左右子树内部还有大量节点没被检查所以必须把“左子树是否单值”和“右子树是否单值”当作两个新的“大事”继续递归拆解递归条件和终止条件终止条件①发现当前检查的节点为空 return true(NULL代表不存在 所以没有值不相等这一说 相等)②不满足①也就是不为空若当前节点值和左孩子值或右孩子值不等return false递归条件当前节点不为空且和左右孩子值相等则对左右孩子进行递归检查三代码/** * 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 isUnivalTree(TreeNode* root) { if(root NULL)//终止条件① return true; if(root-left root-left-val ! root-val) return false;//终止条件② if(root-right root-right-val ! root-val) return false;//终止条件② //当前节点和它的左右孩子节点值相等 则继续递归它的左右孩子检查 return isUnivalTree(root-left) isUnivalTree(root-right); } };解释①先写终止条件①当前节点是空则true反之不是空才能进行对当前节点的左右孩子的访问②现在写终止条件②即可当然判断左右孩子值时需要判断左右孩子是否存在③经过上述代码来到这里就代表当前节点和它的左右节点的值相等则递归遍历左右孩子进行同样的操作④终止条件②只要一个不满足就代表二叉树不是单值二叉树最后的递归代码必须用因为两个孩子的递归判断都必须通过四递归展开图注红色线是递蓝色线是归本博客采用此模型总左右不太清晰再对半发左上左下右上右下 [ 作者 ] shylyly [ 首次发布 ] 2024.8.26❌ [ 最新修改 ] 2026.8.4 [ 声明 ] 由于笔者水平有限文中难免有疏漏或不妥之处还望读者不吝赐教
返回列表