⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tree.cpp

📁 1.程序完整实现了异质树的遍历
💻 CPP
字号:
#include <iostream>
#include <string>
#include "Person.h" 

using namespace std;

Tree::Tree()
{
}     
void Tree::travel(Person* tree)//前序遍历,递归
{
      if(tree!=NULL) 
	  {
	 	  travel(tree->l_Child);
			tree->print();
            travel(tree->r_Child);
	  }
      else
          {
		    return;
          }
}
  //删掉某个节点
void Tree::del(Person*tree,const string d)
{ 
	Person*p=findnode(tree,d);
	if(p==NULL)
	{
		cout<<"未找到该节点"<<endl;
		return;
	}
	if(p->r_Child !=NULL)//二叉排序树,有右孩子 
	{
		if(p->l_Child !=NULL)
		{
			insert_t(p->r_Child,p->l_Child);//如果有左孩子,则 把左孩子插入原节点的右子树 
			if(p->Father->r_Child == p)
				p->Father->r_Child=p->r_Child;
			else
				p->Father->l_Child=p->r_Child;
			p->r_Child->Father = p->Father;
		}
		else
		{
			if(p->Father->r_Child == p)//如果没有左孩子, 直接操作右孩子 
				p->Father->r_Child=p->r_Child;
			else
				p->Father->l_Child=p->r_Child;
			p->r_Child->Father = p->Father;
		}
		
	}	
	else//如果没有右孩子 ,直接操作左孩子 
	{
		if(p->l_Child != NULL)
		{
			if(p->Father->r_Child == p)
				p->Father->r_Child=p->l_Child;
			else
				p->Father->l_Child=p->l_Child;
			p->l_Child->Father= p->Father;
		}
		else//叶节点 
		{
			if(p->Father->r_Child == p)
				p->Father->r_Child = NULL;
			else
				p->Father->l_Child = NULL;		
		}
		
	}

	delete p;
	cout<<"删除成功"<<endl;
	return;
}


void Tree::insert_t(Person*tree,Person *p)//插入节点  
{
	Person *pre = NULL;
    Person *curr = tree; 
    	if(tree == NULL)
	{
		cout<<"根节点为空,请创建根节点"<<endl;
		return;
	}
    while(curr != NULL)
    {   
		pre = curr;
        if (curr->m_Name >= p->m_Name)//如果当前节点大于待插入节点,则搜索左子树
			 
            curr = curr->l_Child;       
        else
            curr = curr->r_Child; //否则,搜索右子树         
    }
    if(pre->m_Name >= p->m_Name)
	{
		pre->l_Child = p;
	}
	else
	{
		pre->r_Child = p;
	}
	p->Father = pre;
	cout<<"插入成功"<<endl;
}     

Person *Tree::findnode(Person* tree,string name)
{
    Person *curr = tree; 
    string find_temp;
    Person* F,* pre;
    find_temp = name;     
    F = NULL;
	if(tree == NULL)
	{
		cout<<"根节点为空,请创建根节点"<<endl;
		return NULL;
	}
    while(curr != NULL)//如果当前节点大于待查找节点,则继续搜索左子树;否则,搜索右子树 
    {   
		pre = curr;
        if (curr->m_Name > find_temp)
            curr = curr->l_Child;       
        else if(curr->m_Name < find_temp) 
            curr = curr->r_Child;            
        else
		{
            F = curr;
			return F;
		}
    }
	return F; 

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -