云计算百科
云计算领域专业知识百科平台

关于二叉树的对称结构的判定

就像上面第一个二叉树就是对称二叉树,第二个树就不是对称二叉树,而且不仅分支我们要二叉树一模一样,就连值也得是一样的。所以我们需要一个函数来判断二叉树的对称性。

首先我们看二叉树的左右节点是不是一样的,是两个都为空的话就是对称的;如果一个为空一个不为空,那么就不是对称的;如果都不为空的话,我们就要判断二叉树里面的值是不是一样的。如果是一样的我们就得往下判断,因为我们是判断是否对称,所以它是镜像的,所以判断左树的左和右树的右是不是一样的,判断左树的右和右树的左是不是一样的。后面就是复杂的递归,这样就从根节点把二叉树分成了左树和右树,就在isBinary函数里面的return的语句后面就判断左树和右树。它不是一棵树来比较,是把从根节点分散的两棵树的镜像节点来拿出来比较,这里不要误以为它的传值是在左节点一棵大树里面来进行传左树和右树。  它是传递的左树的左节点和右树的右节点,传递的是左树的右节点和右树的左节点,(他们是镜像的,可以从中间分开来看)。

//判断二叉树的左右节点是否相同
bool isBinary(struct TreeNode* t1, struct TreeNode* t2)
{
if(t1 == NULL && t2 == NULL)
{
return true;
}
if(t1 == NULL || t2 == NULL)
{
return false;
}
if(t1->val != t2->val)
{
return false;
}
return isBinary(t1->left, t2->right) && isBinary(t1->right, t2->left);
}
//传入我们需要判断的二叉树
bool isSymmetric(struct TreeNode* root) {
return isBinary(root->left, root->right);
}

赞(0)
未经允许不得转载:网硕互联帮助中心 » 关于二叉树的对称结构的判定
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!