判断一个二叉树是否是对称的。
很简单:空节点 叶子节点是true,只有一个孩子是false。
代码:
bool isSymmetricalCore(TreeNode* left, TreeNode* right) {
if(left == NULL && right == NULL)
return true;
if(left == NULL || right == NULL)
return false;
return (left->val == right->val) && isSymmetricalCore(left->left, right->right) && isSymmetricalCore(left->right, right->left);
}
bool isSymmetrical(TreeNode* pRoot){
if(pRoot == NULL)
return true;
return isSymmetricalCore(pRoot->left, pRoot->right);
}
给定一个二叉树,将其变换成其镜像。
也很简单。。。
代码:
void Mirror(TreeNode *pRoot) {
if(pRoot == NULL)
return;
TreeNode *tmp = pRoot->left;
pRoot->left = pRoot->right;
pRoot->right = tmp;
Mirror(pRoot->left);
Mirror(pRoot->right);
}
因为返回类型是void,所以不能用如下写法:(即tmp得不到值)
TreeNode* tmp = Mirror(pRoot->left);
pRoot->left = Mirror(pRoot->right);
pRoot->right = tmp;