C++ 二叉树拷贝(中序遍历)

废话不多说上代码,撸起来!!!

头文件声明和定义:BinaryTree.hpp

#include<iostream>
using namespace std;


struct TreeNode
{
	char* m_strdata;
	TreeNode* m_lNext;
	TreeNode* m_rNext;
};


TreeNode * CopyTree(const TreeNode* rootNode)       //二叉树拷贝
{
	TreeNode* new_rootNode = NULL;
	TreeNode* new_lNode = NULL;
	TreeNode* new_rNode = NULL;
	if (rootNode == NULL)
	{
		return NULL;
	}

	if (rootNode->m_lNext!=NULL)
	{
		new_lNode = CopyTree(rootNode->m_lNext);
	}
	else
	{
		new_lNode = NULL;
	}

	if (rootNode->m_rNext != NULL)
	{
		new_rNode = CopyTree(rootNode->m_rNext);
	}
	else
	{
		new_rNode = NULL;
	}

	new_rootNode = (TreeNode*)malloc(sizeof(TreeNode));
	if (new_rootNode==NULL)
	{
		return NULL;
	}
	new_rootNode->m_lNext = new_lNode;
	new_rootNode->m_rNext = new_rNode;
	new_rootNode->m_strdata = rootNode->m_strdata;
	return new_rootNode;
}


void InOrder(const TreeNode* treeNode)    //递归遍历二叉树
{
	if (treeNode == NULL)
	{
		return;
	}
	InOrder(treeNode->m_lNext);
	printf("%s ", treeNode->m_strdata);
	InOrder(treeNode->m_rNext);
}

测试程序:main.cpp

#include <iostream>
#include "BinaryTree.hpp"
using namespace std;

int main()
{

	TreeNode tn1;
	TreeNode tn2;
	TreeNode tn3;
	TreeNode tn4;
	TreeNode tn5;
	TreeNode tn6;

	tn1.m_strdata = "A";
	tn2.m_strdata = "B";
	tn3.m_strdata = "C";
	tn4.m_strdata = "D";
	tn5.m_strdata = "E";
	tn6.m_strdata = "F";

	tn1.m_lNext = &tn2;
	tn1.m_rNext = &tn3;
	tn2.m_lNext = &tn4;
	tn2.m_rNext = &tn5;
	tn3.m_lNext = &tn6;
	tn3.m_rNext = NULL;
	tn4.m_lNext = NULL;
	tn4.m_rNext = NULL;
	tn5.m_lNext = NULL;
	tn5.m_rNext = NULL;
	tn6.m_lNext = NULL;
	tn6.m_rNext = NULL;

	printf("InOrder: ");
	InOrder(&tn1);        //递归遍历
	printf("\n");

	printf("NewOrder: ");
	TreeNode* retTree = CopyTree(&tn1);    //拷贝二叉树
	InOrder(retTree);
	printf("\n");

	getchar();
	return 0;
}

微信:18761536023

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值