递归三部曲加一步曲

递归的确定有三部曲,但是这里加上自己理解的再加上一步曲(以对称二叉树为例)

首先第一步曲:确定函数的作用,这一步最关键,因为你既然确定了作用,那么后面这个函数就是这个作用,即使你还没有实现(这也是自己加上的一步曲)

确定函数的作用,这一点至关重要(对于对称二叉树而言,也就是比较两个节点的数值是不是相等的,所以取名为compare)

确定递归的返回类型和参数列表

这里是要判断两个节点是不是相等的,那么应该返回bool类型,而且要比较两个节点是不是相等的,把这两个节点传进去,所以变成

bool compare(TreeNode* left,TreeNode* right)

确定终止条件(注意其实所谓的终止条件就是到了最后一步应该干嘛了)

当判断两个节点有以下的情况中的一种的时候应该终止递归

  • 左节点为空,右节点不为空,不对称,return false //说明出现了不对称的节点,那么直接返回false
  • 左不为空,右为空,不对称 return false
  • 左右都为空,对称,返回true //说明到了最后一个节点,返回true
  • 左右都不为空,比较节点数值,不相同就return false

确定单层逻辑

单层的逻辑,就是判断这两个节点left的左节点和right的右节点是不是相等的,以及left的右节点和right的左节点是不是相等的,
也就是(记住这个函数compare已经有一个功能就是比较两个节点是不是相等的)

return compare(left->left,right->right) && compare(left->right,right->left);
posted @ 2023-03-14 10:20  铜锣湾陈昊男  阅读(11)  评论(0)    收藏  举报