C语言递归求解对称二叉树

  1. 思路:二叉树问题大部分应该是递归解决,考虑二叉树的对称,自上而下,从根节点除法,左右孩子是相同的。然后再从左右孩子这两个节点除法,左孩子的左孩子节点等于右孩子的右孩子节点,左孩子的右孩子节点等于右孩子的左孩子节点。
  2. 重点:这个递归式应该是两个参数递归,也就是两个镜像节点进行递归判断。
  3. 递归出口:两个镜像节点进行递归,出口肯定是这两个节点是否相等。一般的递归出口肯定是某一个节点为空,因此先考虑节点1为空的情况,这时候节点,为空则相同,不为空不同,返回结果。同样的再对节点二判断。当两个节点均不为空的情况下判断,如果节点值不同,则返回false,此时如果节点值也行同,进行下一层递归。
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param pRoot TreeNode类 
 * @return bool布尔型
 */
 //递归函数 两个镜像节点参与递归
int dfs(struct TreeNode * lchild,struct TreeNode * rchild){
    //都为NULL才会相等 四种情况考虑
    if(lchild==NULL)
        if(rchild==NULL)
            return true;
        else 
            return false;
    if(rchild==NULL)
        if(lchild==NULL)
            return true;
        else
            return false;
     //判断值是否相同
    if(lchild->val!=rchild->val)
        return false;
     //继续递归下一层,当两个镜像节点的左右孩子均相同,返回true
    else{
        if(dfs(lchild->left,rchild->right)&&dfs(lchild->right,rchild->left))
            return true;
        else
            return false;
    }
    
    
}
bool isSymmetrical(struct TreeNode* pRoot ) {
    if(pRoot==NULL)
        return true;
    return dfs(pRoot->left,pRoot->right);
    
# }