zoukankan      html  css  js  c++  java
  • 二叉树的拷贝和释放(递归)

    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    //二叉链表示法
    typedef struct BiTNode
    {
    	int data;
    	struct BiTNode *lchild,*rchild;
    }BiTNode;
    void inOrder(BiTNode *root)//中序遍历(先遍历左子树然后遍历根最后遍历右子树)
    {
    	if(root==NULL)
    	{
    		return ;
    	}
    	inOrder(root->lchild);//遍历左子树
    	printf("%d ",root->data);//访问根节点
    	inOrder(root->rchild);//遍历右子树
    }
    BiTNode* CopyTree(BiTNode* root)//拷贝树
    {
    	BiTNode* newNode=NULL;
    	BiTNode* newLp=NULL;
    	BiTNode* newRp=NULL;
    	if(root==NULL)
    	{
    		return NULL;
    	}
    	if(root->lchild!=NULL)
    	{
    		newLp=CopyTree(root->lchild);//拷贝左子树
    	}
    	else
    	{
    		newLp=NULL;
    	}
    	if(root->rchild !=NULL)
    	{
    		newRp=CopyTree(root->rchild );//拷贝右子树
    	}
    	else
    	{
    		newRp=NULL;
    	}
    	//malloc根节点
    	newNode=(BiTNode*)malloc(sizeof(BiTNode));
    	if(newNode==NULL)
    	{
    		return NULL;
    	}
    	newNode->lchild=newLp;
    	newNode->rchild=newRp;
    	newNode->data=root->data;
    	return newNode;
    }
    //释放开辟的树的结点
    void FreeTree(BiTNode* root)
    {
    	if(root==NULL)
    	{
    		return ;
    	}
    	if(root->lchild!=NULL)
    	{
    		FreeTree(root->lchild);
    		root->lchild=NULL;
    	}
    	if(root->rchild!=NULL)
    	{
    		FreeTree(root->rchild);
    		root->rchild=NULL;
    	}
    	if(root!=NULL)
    	{
    		free(root);
    		root=NULL;
    	}
    }
    int main()
    {
    	int height=0;
    	BiTNode t1,t2,t3,t4,t5;
    	BiTNode *pt;
    	memset(&t1,0,sizeof(BiTNode));
    	memset(&t2,0,sizeof(BiTNode));
    	memset(&t3,0,sizeof(BiTNode));
    	memset(&t4,0,sizeof(BiTNode));
    	memset(&t5,0,sizeof(BiTNode));
    	t1.data=1;
    	t2.data=2;
    	t3.data=3;
    	t4.data=4;
    	t5.data=5;
    	//表达二叉树,建立关系
    	t1.lchild=&t2;
    	t1.rchild=&t3;
    	t2.lchild=&t4;
    	t3.rchild=&t5;
    	printf("中序遍历:");
    	inOrder(&t1);
    	printf("
    ");
    	pt=CopyTree(&t1);
    	printf("调用函数CopyTree()之后:");
    	inOrder(pt);
    	printf("
    ");
    	FreeTree(pt);
    	return 0;
    }
    

      

  • 相关阅读:
    https://scrapingclub.com/exercise/detail_sign/
    https://scrapingclub.com/exercise/basic_captcha/
    https://scrapingclub.com/exercise/basic_login/
    344. 反转字符串(简单)
    142. 环形链表 II(中等)
    面试题02.07.链表相交
    19. 删除链表的倒数第 N 个结点
    24.两两交换链表中的节点
    206.反转链表(简单)
    707.设计链表
  • 原文地址:https://www.cnblogs.com/jueshi0208/p/5548944.html
Copyright © 2011-2022 走看看