比较两个二叉树是否相同
#include<stdio.h>
#include<stdlib.h>
typedef struct BiTNode{
int data;
struct BiTNode * lchild, * rchild;
}BiTNode,* BiTree;
bool BiT_Equal(BiTree, BiTree);
int main()
{
BiTree A = malloc((sizeof(BiTNode)));
BiTNode* temp=A;
for (int i = 0; i < 5; i++) { //更新A左子树的值
temp->data = i;
temp = temp->lchild;
temp->lchild->data = i + 1;
temp->rchild->data = i + 2;
}
temp = A->rchild;
for (int i = 0; i < 5; i++) { //更新A右子树的值
temp->data = i;
temp = temp->rchild;
temp->lchild->data = i + 1;
temp->rchild->data = i + 2;
}
temp = B;
for (int i = 0; i < 5; i++) { //更新B左子树的值
temp->data = i;
temp = temp->lchild;
temp->lchild->data = i + 1;
temp->rchild->data = i + 2;
}
temp = A->rchild;
for (int i = 0; i < 5; i++) { //更新B右子树的值
temp->data = i;
temp = temp->rchild;
temp->lchild->data = i + 1;
temp->rchild->data = i + 2;
}
if (BiT_Equal(A, B)) {
printf("A和B数是相等的");
}
else {
printf("A和B数不是相等的");
}
return 0;
}
/*
递:判断L和R是否相等的函数,则能继续判断L->lchild, L->rchild是否相等
归:两个都是空结点、一个是空节点一个不是
*/
bool BiT_Equal(BiTree L, BiTree R) { //判断L和R是否相等的函数
if (!L && !R) { //两个都是空节点(归)
return true;
}
else if (!L|| !R) { //有一个是空节点(归)
return false;
}
else { //两个都不是空节点(递)
if (L->data == R->data) {
return BiT_Equal(L->lchild, L->rchild);
}
else {
return false;
}
}
}
反转二叉树 将左边的二叉树反转成右边的二叉树
public TreeNode invertTree(TreeNode root) { // 叶子结果不能翻转 if (root == null) { return null; } // 翻转左节点下的左右节点 TreeNode left = invertTree(root.left); // 翻转右节点下的左右节点 TreeNode right = invertTree(root.right); // 左右节点下的二叉树翻转好后,翻转根节点的左右节点 root.right = left; root.left = right; return root; }