C语言递归求解对称二叉树
- 思路:二叉树问题大部分应该是递归解决,考虑二叉树的对称,自上而下,从根节点除法,左右孩子是相同的。然后再从左右孩子这两个节点除法,左孩子的左孩子节点等于右孩子的右孩子节点,左孩子的右孩子节点等于右孩子的左孩子节点。
- 重点:这个递归式应该是两个参数递归,也就是两个镜像节点进行递归判断。
- 递归出口:两个镜像节点进行递归,出口肯定是这两个节点是否相等。一般的递归出口肯定是某一个节点为空,因此先考虑节点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);
# }