二叉树递归

比较两个二叉树是否相同

#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; }

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值