设为首页 加入收藏

TOP

慕课网学习笔记之数据结构树(C++)(二)
2016-10-08 17:31:05 】 浏览:572
Tags:慕课网 学习 笔记 数据结构
Traverse(); cout< index<<" "< data << endl; if(this->pRChild != NULL) this->pRChild->InorderTraverse(); } void Node::PostorderTraverse() { if(this->pLChild !=NULL) this->pLChild->PostorderTraverse(); if(this->pRChild != NULL) this->pRChild->PostorderTraverse(); cout< index<<" "< data << endl; }

tree.cpp文件:

#include"stdlib.h"
Tree::Tree()
{
    m_pRoot = new Node();                                   //申请内存 
}

Tree::~Tree()
{
//  DeleteNode(0,NULL);                                     //这种方式也能实现销毁树 
    m_pRoot->DeleteNode();
}

Node *Tree::SearchNode(int nodeIndex)
{
    return m_pRoot->SearchNode(nodeIndex);                  //根节点调用查找 
}

bool Tree::AddNode(int nodeIndex,int direction,Node *pNode) // 索引号,左(0)右(1)孩子 ,要插入的节点 
{
    Node *temp =SearchNode(nodeIndex);                      //先查找 
    if(temp==NULL)
        return false;                                       //不存在则不能插入 
    Node *node = new Node();                                //申请新节点 
    if(node==NULL)                                          //申请是否成功 
        return false;
    node->index = pNode->index;                             //传入索引号 
    node->data = pNode->data;                               //传入数据 
    node->pParent = temp;                   //这很关键,涉及到删除的成功与否 ,指出插入的节点双亲是谁 
    if(0==direction)
        temp->pLChild = node;
    if(1==direction)
        temp->pRChild = node;

    return true;        
}

bool Tree::DeleteNode(int nodeIndex,Node *pNode)
{
    Node *temp =SearchNode(nodeIndex);                  //先找到才能删 
    if(temp==NULL)
        return false;
    if(pNode != NULL)               
        pNode->data=temp->data;                         //删除数据可以传出 
    temp->DeleteNode();                                 //调用Node.cpp中的删除方法 
    return true;        
}
/**以下是三种遍历,实现在Node.cpp里定义**/ 
void Tree::PreorderTraverse()
{
    m_pRoot->PreorderTraverse();
}

void Tree::InorderTraverse()
{
    m_pRoot->InorderTraverse() ;
}

void Tree::PostorderTraverse()
{
    m_pRoot->PostorderTraverse();
}

domo.cpp文件(用于验证):

#include
  
   
#include"Tree.h"
using namespace std;

int main()  
{ 
    Node node1;
    node1.index=1;
    node1.data = 5;

    Node node2;
    node2.index=2;
    node2.data = 8;

    Node node3;
    node3.index=3;
    node3.data = 2;

    Node node4;
    node4.index=4;
    node4.data = 6;

    Node node5;
    node5.index=5;
    node5.data = 9;

    Node node6;
    node6.index=6;
    node6.data = 7;

    Tree *pTree = new Tree();   

    pTree->AddNode(0,0,&node1);
    pTree->AddNode(0,1,&node2);

    pTree->AddNode(1,0,&node3);
    pTree->AddNode(1,1,&node4);

    pTree->AddNode(2,0,&node5);
    pTree->AddNode(2,1,&node6);

    cout<<"PreorderTraverse: "  <
   
    PreorderTraverse(); cout<<"InorderTraverse: " <
    
     InorderTraverse(); cout<<"PostorderTraverse: " <
     
      PostorderTraverse(); pTree->DeleteNode(6,NULL); cout<<"PreorderTraverse: " <
      
       PreorderTraverse(); delete pTree; pTree= NULL; return 0; } 
      
     
    
   
  

运行结果:

  

这里写图片描述
首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇c/c++经典算法面试题 下一篇C/C++文件IO

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目