最近中文字幕高清中文字幕无,亚洲欧美高清一区二区三区,一本色道无码道dvd在线观看 ,一个人看的www免费高清中文字幕

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
  • 二叉樹的三種遍歷方式:
    1. 前序遍歷:根-左節(jié)點(diǎn)-右節(jié)點(diǎn)
    2. 中序遍歷:左節(jié)點(diǎn)-根-右
    3. 后序遍歷:左-右-根
    總體以根的遍歷先后順序區(qū)分
    查看全部
  • 前序遍歷:根左右:根>根(左)>左>右(左)>根(右)>左(右)>右

    中序遍歷:左根右:左>根(左)>右(左)>根>左(右)>根(右)>右

    后序遍歷:左右根:左>右(左)>根(左)>左(右)>右>根(右)>根

    查看全部
  • 對于數(shù)組表示的二叉樹:簡單遍歷,無前中后序

    函數(shù):

    創(chuàng)造函數(shù)和析構(gòu)函數(shù)——?jiǎng)?chuàng)建和銷毀樹

    SearchNode(Tree *pTree,int nodeIndex):搜索節(jié)點(diǎn),要指定數(shù)組下標(biāo)

    AddNode(Tree *pTree,int nodeIndex,int direction,Node *pNode):指定往哪一個(gè)下標(biāo)的節(jié)點(diǎn)上去添加節(jié)點(diǎn);指定方向:添加的是左孩子還是右孩子;指定要添加的節(jié)點(diǎn):把要添加的節(jié)點(diǎn)掛在指定的位置上(相對于根節(jié)點(diǎn)而言)

    查看全部
  • 樹的節(jié)點(diǎn)的搜索:指定當(dāng)前節(jié)點(diǎn)的索引(下標(biāo))即可找到對應(yīng)的數(shù)據(jù)


    查看全部
  • 完全可以把一個(gè)數(shù)組看作一個(gè)二叉樹

    一個(gè)節(jié)點(diǎn)若只有右子樹而沒有左子樹,則用 0表達(dá)當(dāng)前位置不存在節(jié)點(diǎn)的情況。

    索引是與數(shù)組與生俱來的。

    對于父節(jié)點(diǎn)來說,其下標(biāo)*2+1:左孩子? ;? 其下標(biāo)*2+2:右孩子

    查看全部
  • 樹的用途:

    壓縮軟件--赫夫曼樹

    搜索--人機(jī)對戰(zhàn)

    查看全部
  • 二叉樹:

    1、所有結(jié)點(diǎn)的度都小于等于2

    二叉樹的遍歷:( 相對于二叉樹的根來說)

    前序遍歷:先訪問根,再訪問左右節(jié)點(diǎn)--根左右

    中序遍歷:先訪問左節(jié)點(diǎn),再訪問根,再訪問右節(jié)點(diǎn)--左根右

    后序遍歷:先訪問左右節(jié)點(diǎn),再訪問根(訪問根的操作在最后)--左右根


    查看全部
  • 樹是節(jié)點(diǎn)的有限集合

    每一個(gè)元素都是一個(gè)節(jié)點(diǎn)

    根節(jié)點(diǎn):雙親(一個(gè)節(jié)點(diǎn),父節(jié)點(diǎn))

    度:當(dāng)前節(jié)點(diǎn)的直接孩子個(gè)數(shù)

    A接著三個(gè)節(jié)點(diǎn),度為3,BCD的雙親就是A 節(jié)點(diǎn),A 的孩子就是BCD

    對于一棵樹來說,終端節(jié)點(diǎn):葉子(EFGHC);非終端節(jié)點(diǎn)根:(相對于葉子來說)

    有序樹:節(jié)點(diǎn)不可換順序;無序樹:節(jié)點(diǎn)可換順序而不影響邏輯

    祖先:當(dāng)前節(jié)點(diǎn)向上的節(jié)點(diǎn)直至總根均為其祖先;子孫:從該節(jié)點(diǎn)向下伸出的連接的節(jié)點(diǎn)均屬于其子孫(A的子孫為BCDEFGH)

    深度:結(jié)點(diǎn)深度&樹的深度

    結(jié)點(diǎn)深度:與所在層數(shù)有關(guān),在第幾層深度就為幾;

    樹的深度:當(dāng)前樹中結(jié)點(diǎn)所具有的最大深度

    森林:多顆獨(dú)立的樹放在一起成為森林;也可孤木成林


    查看全部
  • 二叉樹的遍歷分為前序,中序,后續(xù)?

    前中后是訪問根節(jié)點(diǎn)順序分為前中后而定義

    查看全部
  • 發(fā)現(xiàn)一個(gè)學(xué)it不錯(cuò)的網(wǎng)站 百度搜索 it猿課 網(wǎng)址 http://ityuanke.com 里面好像市面全部課都有
    查看全部
  • 發(fā)現(xiàn)一個(gè)學(xué)it不錯(cuò)的網(wǎng)站 百度搜索 it猿課 網(wǎng)址 http://ityuanke.com 里面好像市面全部課都有
    查看全部
  • 按照樹的結(jié)構(gòu)遍歷輸出:

    http://img1.sycdn.imooc.com//5e747ef5000123e709320376.jpg

    查看全部
  • 遞歸刪除子節(jié)點(diǎn)

    http://img1.sycdn.imooc.com//5e747df70001ec3810620372.jpg

    查看全部
  • 關(guān)于樹的遍歷,在遞歸中,一直往下層走,是如何返回上一層的?


    cout << this->Index << endl;????//先輸出當(dāng)前結(jié)點(diǎn)。

    this->pLchild->ProTraversal();????//在左結(jié)點(diǎn)中,先輸出左結(jié)點(diǎn),如果沒有左右結(jié)點(diǎn),結(jié)束語句(跳出函數(shù))。

    this->pRchild->ProTraversal();????//在右結(jié)點(diǎn)中,先輸出右結(jié)點(diǎn),如果沒有左右結(jié)點(diǎn),結(jié)束語句(跳出函數(shù))。


    函數(shù)有執(zhí)行順序的,先執(zhí)行最最最里層的函數(shù),再跳出該函數(shù)繼續(xù)執(zhí)行倒第二層函數(shù)接下來的函數(shù)。以此類推,最后一次執(zhí)行的是第一次調(diào)用此函數(shù)的return。


    查看全部
  • 用數(shù)組表達(dá)二叉樹。? ?沒有節(jié)點(diǎn)的地方用0表示。父節(jié)點(diǎn)下標(biāo)*2+1 表示左孩子。? 父節(jié)點(diǎn)下標(biāo)*2+2表示右孩子


    我們在構(gòu)建樹的時(shí)候一般都不會(huì)用數(shù)組,因?yàn)槲覀円婚_始不會(huì)知道樹有多少個(gè)節(jié)點(diǎn),用數(shù)組的話我們是一開始就聲明一段連續(xù)的內(nèi)存,如果節(jié)點(diǎn)沒有預(yù)設(shè)的那么多就會(huì)浪費(fèi)內(nèi)存;如果節(jié)點(diǎn)超出預(yù)計(jì)數(shù)量,就要重新建立一個(gè)新的數(shù)組把原來數(shù)組的數(shù)據(jù)傳去新的數(shù)組,這樣會(huì)浪費(fèi)計(jì)算資源。用指針的話方便無限添加新節(jié)點(diǎn),用數(shù)組建構(gòu)的樹,節(jié)點(diǎn)與節(jié)點(diǎn)之間不需要是連續(xù)的內(nèi)存,只需要在建立新節(jié)點(diǎn)的時(shí)候把指針指向父節(jié)點(diǎn)即可,方便對樹進(jìn)行添加與刪除的操作。

    查看全部
  • 二叉樹的遍歷,前中后是相對于根節(jié)點(diǎn)來說的。先訪問根節(jié)點(diǎn)就是前序,以此類推

    查看全部
  • 二叉樹就是所有節(jié)點(diǎn)的度<=2的樹

    查看全部
  • 樹是節(jié)點(diǎn)的有限集合

    查看全部
  • Node.cpp中的SearchNode(int nodeIndex)函數(shù)可以很簡化,如下:

    Node* Node::SearchNode(int nodeIndex)

    {

    if (this->index == nodeIndex)

    return this;

    if (this->pLChild != NULL)

    if (this->pLChild->SearchNode(nodeIndex) != NULL)

    return this->pLChild->SearchNode(nodeIndex);

    if (this->pRChild != NULL)

    return this->pRChild->SearchNode(nodeIndex);

    return NULL;

    }


    查看全部
  • main.cpp:
    
    
    #include?<iostream>
    #include?"Tree.h"
    #include?<stdlib.h>
    using?namespace?std;
    
    /*
    二叉樹(用鏈表表達(dá))
    
    ?結(jié)點(diǎn)要素:索引?數(shù)據(jù)?左孩子指針?右孩子指針?父結(jié)點(diǎn)指針
    
    ?(頭節(jié)點(diǎn)的父結(jié)點(diǎn)指針為NULL,葉結(jié)點(diǎn)的左右孩子結(jié)點(diǎn)指針為NULL)
    
    索引:
    
    ?數(shù)組表達(dá)的二叉樹中的索引指的就是數(shù)組的下標(biāo)
    鏈表表達(dá)時(shí),索引必須也是當(dāng)前結(jié)點(diǎn)的一部分,所以需要用一個(gè)數(shù)據(jù)成元來表示索引
    
    int?tree[n]?3??5?8???2?6?9?7
    
    ?數(shù)據(jù):
    ?此處用int
    
    ?左孩子指針、右孩子指針:拿到一個(gè)結(jié)點(diǎn)時(shí),可以通過其左孩子指針、右孩子指針分別訪問其左孩子結(jié)點(diǎn)、右。
    ????????(0)
    
    ????5(1)??????8(2)
    
    2(3)?6(4)??9(5)7(6)
    
    ?前序遍歷:(下標(biāo))0?1?3?4?2?5?6
    ?中序遍歷:?3140526
    ?后序遍歷:3415620
    
    ?如果要在孩子結(jié)點(diǎn)掛載孩子,需要通過搜索找到孩子結(jié)點(diǎn)的索引,所以,查找結(jié)點(diǎn)是一個(gè)基本操作,通過頭結(jié)點(diǎn)找到結(jié)點(diǎn),再進(jìn)行其他操作。
    如果要?jiǎng)h除結(jié)點(diǎn),不僅刪除一個(gè)結(jié)點(diǎn),需要把其所有子結(jié)點(diǎn)和子結(jié)點(diǎn)的子結(jié)點(diǎn)全部刪除
    
    ?銷毀樹時(shí),也需要通過指針一級一級地找到頭結(jié)點(diǎn)一下的所有結(jié)點(diǎn)一一進(jìn)行消除,否則造成內(nèi)存的泄漏
    ?*/
    int?main()?{
    ????Node?*node1?=?new?Node();
    ????node1->index?=?1;
    ????node1->data?=?5;
    
    ????Node?*node2?=?new?Node();
    ????node2->index?=?2;
    ????node2->data?=?8;
    
    ????Node?*node3?=?new?Node();
    ????node3->index?=?3;
    ????node3->data?=?2;
    
    ????Node?*node4?=?new?Node();
    ????node4->index?=?4;
    ????node4->data?=?6;
    
    ????Node?*node5?=?new?Node();
    ????node5->index?=?5;
    ????node5->data?=?9;
    
    ????Node?*node6?=?new?Node();
    ????node6->index?=?6;
    ????node6->data?=?7;
    
    ????Tree?*tree?=?new?Tree();
    ????tree->AddNode(0,0,node1);
    ????tree->AddNode(0,1,node2);
    
    ????tree->AddNode(1,0,node3);
    ????tree->AddNode(1,1,node4);
    
    ????tree->AddNode(2,0,node5);
    ????tree->AddNode(2,1,node6);
    
    ???//?tree->PreorderTraversal();
    ????tree->InorderTraversal();
    //????tree->PostorderTraversal();
    
    ????return?0;
    }
    Tree.cpp:
    
    #include?"Tree.h"
    #include?"Node.h"
    #include?<iostream>
    #include?<stdio.h>
    using?namespace?std;
    
    
    Tree::Tree(){
    ????m_pRoot?=?new?Node();//頭節(jié)點(diǎn)不放有意義的值,index為0;
    }
    
    
    Tree::~Tree()?{//銷毀樹
    ????DeleteNode(0,NULL);
    ????//或者m_pRoot->DeleteNode();
    }
    
    Node?*Tree::SearchNode(int?nodeIndex)?{//根據(jù)索引尋找結(jié)點(diǎn)
    //遞歸函數(shù)
    ????return?m_pRoot->SearchNode(nodeIndex);
    }
    
    bool?Tree::AddNode(int?nodeIndex,int?direction,Node?*pNode)?{//添加結(jié)點(diǎn)
    ????Node?*temp?=?SearchNode(nodeIndex);
    ????if(temp?==?NULL){
    ????????return?false;//根本沒有找到對應(yīng)結(jié)點(diǎn)
    ????}
    ????//不能直接用外面?zhèn)鬟M(jìn)來的結(jié)點(diǎn),因?yàn)橥饷娴暮瘮?shù)可以對其進(jìn)行修改,容易導(dǎo)致其他錯(cuò)誤
    ????Node?*node?=?new?Node();
    ????if(node?==?NULL){
    ????????return?false;
    ????}
    ????//只需要對這兩個(gè)值進(jìn)行復(fù)制,其他三個(gè)指針不用,因?yàn)槿齻€(gè)指針的值取決于結(jié)點(diǎn)在樹中的位置
    ????node->index?=?pNode->index;
    ????node->data?=?pNode->data;
    ????node->pParent?=?temp;
    
    ????if(direction?==?0){
    ????????temp->pLChild?=?node;
    ????}
    
    ????if(direction?==?1){
    ????????temp->pRChild?=?node;
    ????}
    
    ????return?true;
    
    }
    
    bool?Tree::DeleteNode(int?nodeIndex,Node?*pNode)?{//刪除結(jié)點(diǎn)
    ????Node?*temp?=?SearchNode(nodeIndex);
    ????if(temp?==?NULL){
    ????????return?false;//根本沒有找到對應(yīng)結(jié)點(diǎn)
    ????}
    
    ????if(pNode?!=?NULL){//若pNode==NULL,意思就是不要這個(gè)結(jié)點(diǎn),刪了不需要
    ????????pNode->data?=?temp->data;
    ????}
    ????//刪除結(jié)點(diǎn)在樹這個(gè)層面不太容易操作,所以在Node級進(jìn)行操作
    ????//對于Node來說,刪除自己需要:
    ????//?1.把自己的子結(jié)點(diǎn)刪除
    ????//?2.看自己是父結(jié)點(diǎn)的左孩子還是右孩子,把父結(jié)點(diǎn)對應(yīng)指針置為NULL,然后再自殺;
    
    ????temp->DeleteNode();
    ????return?true;
    }
    
    
    void?Tree::PreorderTraversal()?{//前序遍歷,在Node中比在Tree中更容易實(shí)現(xiàn)
    ????m_pRoot->PreorderTraversal();
    }
    void?Tree::InorderTraversal()?{//中序遍歷
    ????m_pRoot->InorderTraversal();
    }
    void?Tree::PostorderTraversal()?{//后序遍歷
    ????m_pRoot->PreorderTraversal();
    }


    Tree.h:
    
    
    #ifndef?INC_0210_TREE_H
    #define?INC_0210_TREE_H
    
    #include?"Node.h"
    #include?<stdio.h>
    class?Tree{
    public:
    ????Tree();//創(chuàng)建樹
    ????~Tree();//銷毀樹
    ????Node?*SearchNode(int?nodeIndex);//根據(jù)索引尋找結(jié)點(diǎn)
    ????bool?AddNode(int?nodeIndex,int?direction,Node?*pNode);//添加結(jié)點(diǎn)
    ????bool?DeleteNode(int?nodeIndex,Node?*pNode);//刪除結(jié)點(diǎn)
    
    ????void?PreorderTraversal();//前序遍歷
    ????void?InorderTraversal();//中序遍歷
    ????void?PostorderTraversal();//后序遍歷
    
    
    private:
    ????Node?*m_pRoot;
    };
    
    #endif?//INC_0210_TREE_H


    Node.h:
    
    #include?<stdio.h>
    
    #ifndef?INC_0210_NODE_H
    #define?INC_0210_NODE_H
    
    class?Node{
    public:
    ????Node();
    ????Node?*SearchNode(int?nodeIndex);
    ????void?DeleteNode();
    ????void?PreorderTraversal();//前序遍歷
    ????void?InorderTraversal();//中序遍歷
    ????void?PostorderTraversal();//后序遍歷
    ????//需要注意,bool不需要,因?yàn)樵跇溥@個(gè)類中已經(jīng)找到結(jié)點(diǎn)類,無所謂找得到與否,所以也不需要nodeIndex。
    ????//第二個(gè)參數(shù)也不需要了,在Tree中的刪除函數(shù)已經(jīng)取到了
    ????int?index;
    ????int?data;
    ????Node?*pLChild;
    ????Node?*pRChild;
    ????Node?*pParent;
    };
    
    #endif?//INC_0210_NODE_H
    Node.cpp:
    
    #include?"Node.h"
    #include?"Tree.h"
    #include?<stdio.h>
    #include?<iostream>
    using?namespace?std;
    
    Node::Node()?{
    ????index?=?0;
    ????data?=?0;
    ????pLChild?=?NULL;
    ????pRChild?=?NULL;
    ????pParent?=?NULL;
    }
    
    Node?*Node::SearchNode(int?nodeIndex){//一個(gè)是Tree下面的SearchNode,一個(gè)是Node下面的SearchNode,功能基本相同
    ????//在Node下面實(shí)現(xiàn)這個(gè)功能,這個(gè)功能將來被Tree這個(gè)類調(diào)用
    ????if(this->index?==?nodeIndex){
    ????????return?this;//返回當(dāng)前這個(gè)結(jié)點(diǎn)
    ????}
    
    ????Node?*temp?=?NULL;
    ????if(this->pLChild?!=?NULL){
    ????????if(this->pLChild->index?==?nodeIndex){
    ????????????return?this->pLChild;
    ????????}
    ????????//若不是左孩子
    ????????else{
    ????????????temp?=?this->pLChild->SearchNode(nodeIndex);
    ????????????if(temp?!=?NULL)?return?temp;
    ????????}
    ????}
    
    ????if(this->pRChild?!=?NULL){
    ????????if(this->pRChild->index?==nodeIndex){
    ????????????return?this->pRChild;
    ????????}
    ????????else{
    ????????????temp?=?this->pRChild->SearchNode(nodeIndex);
    ????????????if(temp?!=?NULL)?return?temp;
    ????????}
    ????}
    ????return?NULL;
    }
    
    void?Node::DeleteNode()?{
    ????if(this->pLChild?!=?NULL){
    ????????this->pLChild->DeleteNode();
    ????}
    ????if(this->pRChild?!=?NULL){
    ????????this->pRChild->DeleteNode();
    ????}
    ????if(this->pParent?!=?NULL){
    ????????if(this->pParent->pLChild?==?this){
    ????????????this->pParent->pLChild?=?NULL;
    ????????}
    ????????if(this->pParent->pRChild?==?this){
    ????????????this->pParent->pRChild?=?NULL;
    ????????}
    ????}
    ????delete?this;
    }
    
    
    void?Node::PreorderTraversal()?{//前序遍歷,在Node中比在Tree中更容易實(shí)現(xiàn)
    ????cout?<<?this->index?<<?"??"<<?this->data?<<?endl;
    ????if(this->pLChild?!=?NULL){
    ????????this->pLChild->PreorderTraversal();//通過遞歸,將訪問左結(jié)點(diǎn)的概念變成訪問左子樹
    ????}
    ????if(this->pRChild?!=?NULL){
    ????????this->pRChild->PreorderTraversal();
    ????}
    }
    
    void?Node::InorderTraversal()?{//中序遍歷
    ????if(this->pLChild?!=?NULL){
    ????????this->pLChild->InorderTraversal();
    ????}
    ????cout?<<?this->index?<<?"??"<<?this->data?<<?endl;
    ????if(this->pRChild?!=?NULL){
    ????????this->pRChild->InorderTraversal();
    ????}
    }
    void?Node::PostorderTraversal()?{//后序遍歷
    ????if(this->pLChild?!=?NULL){
    ????????this->pLChild->PostorderTraversal();
    ????}
    ????if(this->pRChild?!=?NULL){
    ????????this->pRChild->PostorderTraversal();
    ????}
    ????cout?<<?this->index?<<?"??"<<?this->data?<<?endl;
    }


    查看全部
  • 數(shù)組表示二叉樹:

    Tree.h:
    
    
    #ifndef?INC_0210_TREE_H
    #define?INC_0210_TREE_H
    
    class?Tree{
    public:
    ????Tree(int?size,int?*pRoot);//創(chuàng)建樹
    ????~Tree();//銷毀樹
    ????int?*SearchNode(int?nodeIndex);//根據(jù)索引尋找結(jié)點(diǎn)
    ????bool?AddNode(int?nodeIndex,int?direction,int?*pNode);//添加結(jié)點(diǎn)
    ????bool?DeleteNode(int?nodeIndex,int?*pNode);//刪除結(jié)點(diǎn)
    ????void?TreeTraverse();//遍歷結(jié)點(diǎn)
    private:
    ????int?*m_pTree;//指針指向數(shù)組,數(shù)組在構(gòu)造函數(shù)中去分配,在析構(gòu)函數(shù)中去銷毀
    ????int?m_iSize;
    };
    
    #endif?//INC_0210_TREE_H


    Tree.cpp:
    
    
    
    #include?"Tree.h"
    #include?<iostream>
    using?namespace?std;
    
    Tree::Tree(int?size,int?*pRoot)?{
    ????m_iSize?=?size;
    ????m_pTree?=?new?int[size];
    
    ????//初始化為0
    ????for(int?i?=0;i?<?size?;i++){
    ????????m_pTree[i]?=?0;
    ????}
    ????m_pTree[0]?=?*pRoot;//初始化根結(jié)點(diǎn)
    }
    
    Tree::~Tree(){
    ????delete?[]m_pTree;
    ????m_pTree?=?NULL;
    }
    
    int?*Tree::SearchNode(int?nodeIndex){
    ????//對nodeIndex的合法性進(jìn)行判斷
    ????if(nodeIndex?<?0?||?nodeIndex?>=?m_iSize){
    ????????return?NULL;
    ????}
    ????//若當(dāng)前結(jié)點(diǎn)沒有意義
    ????if(m_pTree[nodeIndex]?==?0){
    ????????return?NULL;
    ????}
    ????return?&m_pTree[nodeIndex];
    }
    
    bool?Tree::AddNode(int?nodeIndex,int?direction,int?*pNode){
    ????//先找到對應(yīng)結(jié)點(diǎn),之前還是需要進(jìn)行合法性判斷
    ????if(nodeIndex?<?0?||?nodeIndex?>=?m_iSize){
    ????????return?false;
    ????}
    ????//若當(dāng)前結(jié)點(diǎn)沒有意義
    ????if(m_pTree[nodeIndex]?==?0){
    ????????return?false;
    ????}
    ????//若合法,0-左,1-右
    ????if(direction?==?0){
    ????????if(?nodeIndex?*?2?+?1?>=?m_iSize){
    ????????????return?false;
    ????????}
    ????????//若當(dāng)前結(jié)點(diǎn)沒有意義
    ????????if(m_pTree[nodeIndex?*?2?+?1]?!=?0){//若左節(jié)點(diǎn)已經(jīng)有值
    ????????????return?false;
    ????????}
    ????????m_pTree[nodeIndex?*?2?+?1]?=?*pNode;//pNode本身是一個(gè)指針,我們需要往里面放內(nèi)容
    ????}
    ????if(direction?==?1){
    ????????if(?nodeIndex?*?2?+?2?>=?m_iSize){
    ????????????return?false;
    ????????}
    ????????//若當(dāng)前結(jié)點(diǎn)沒有意義
    ????????if(m_pTree[nodeIndex?*?2?+?2]?!=?0){//若左節(jié)點(diǎn)已經(jīng)有值
    ????????????return?false;
    ????????}
    ????????m_pTree[nodeIndex?*?2?+?2]?=?*pNode;//pNode本身是一個(gè)指針,我們需要往里面放內(nèi)容
    ????}
    ????return?true;
    
    }
    
    bool?Tree::DeleteNode(int?nodeIndex,int?*pNode){
    ????//先找到對應(yīng)結(jié)點(diǎn),之前還是需要進(jìn)行合法性判斷
    ????if(nodeIndex?<?0?||?nodeIndex?>=?m_iSize){
    ????????return?false;
    ????}
    ????//若當(dāng)前結(jié)點(diǎn)沒有意義
    ????if(m_pTree[nodeIndex]?==?0){
    ????????return?false;
    ????}
    ????//若合法,則傳出來
    ????*pNode?=?m_pTree[nodeIndex];
    ????//然后把對應(yīng)結(jié)點(diǎn)刪除,即置零
    ????m_pTree[nodeIndex]?=?0;
    ????return?true;
    }
    void?Tree::TreeTraverse(){
    ????for(int?i=0;i<m_iSize;i++){
    ????????cout?<<?m_pTree[i]<<"?";
    ????}
    }


    main.cpp:
    
    
    #include?<iostream>
    #include?"Tree.h"
    #include?<stdlib.h>
    using?namespace?std;
    
    /*
    二叉樹(數(shù)組表示,也可以使用鏈表表達(dá))
    課程要求:完成樹的基本操作
    1.樹的創(chuàng)建和銷毀
    2.樹中節(jié)點(diǎn)的搜索
    3.樹中節(jié)點(diǎn)的添加與刪除
    4.樹中節(jié)點(diǎn)的遍歷
    
    BOOL?CreatTree(Tree?**pTree,Node?*pRoot);//創(chuàng)建樹
    void?DestroyTree(Tree?*pTree);//銷毀樹
    Node?*SearchNode(Tree?*pTree,int?nodeIndex);//根據(jù)索引尋找節(jié)點(diǎn)
    BOOL?AddNode(Tree?*pTree,int?nodeIndex,int?direction,Node?*pNode);//添加節(jié)點(diǎn)
    BOOL?DeleteNode(Tree?*pTree,int?nodeIndex,Node?*pNode);//刪除節(jié)點(diǎn)
    void?TreeTraverse(Tree?*pTree);//遍歷
    
    關(guān)于數(shù)組與樹之間的算法轉(zhuǎn)換
    int?tree[n]?3??5?8???2?6?9?7
    
    ????????3(0)???????????父結(jié)點(diǎn)下標(biāo)*2+1?該結(jié)點(diǎn)左
    ????????????????????????父結(jié)點(diǎn)下標(biāo)*2+2?該結(jié)點(diǎn)右
    ????5(1)??????8(2)
    
    2(3)?6(4)??9(5)7(6)
    ?*/
    int?main()?{
    ????int?root?=?3;
    ????Tree?*pTree?=?new?Tree(10,&root);//調(diào)用構(gòu)造函數(shù)
    ????int?node1?=?5;
    ????int?node2?=?8;
    ????pTree->AddNode(0,0,&node1);
    ????pTree->AddNode(0,1,&node2);
    
    ????int?node3?=?2;
    ????int?node4?=?6;
    
    ????pTree->AddNode(1,0,&node3);
    ????pTree->AddNode(1,1,&node4);
    
    ????int?node5?=?9;
    ????int?node6?=?7;
    
    ????pTree->AddNode(2,0,&node5);
    ????pTree->AddNode(2,1,&node6);
    
    ????int?node?=?0;
    ????pTree->DeleteNode(6,&node);
    ????cout?<<endl?<<"node="<<node<<?endl;
    
    ????pTree->TreeTraverse();
    
    ????int?*p?=?pTree->SearchNode(2);
    ????cout?<<endl?<<"node="<<?*p?<<?endl;
    
    ????delete?pTree;//調(diào)用析構(gòu)函數(shù)
    ????return?0;
    }


    查看全部
  • 樹是節(jié)點(diǎn)的有限集合

    度:當(dāng)前節(jié)點(diǎn)的直接的孩子(子節(jié)點(diǎn))

    結(jié)點(diǎn)深度:在第幾層深度就是幾

    樹深度

    ?二叉樹

    1.所有結(jié)點(diǎn)的度都<=2

    2.(對于根來說)

    http://img1.sycdn.imooc.com//5e41533800017cdb12060702.jpg

    樹的用途:人機(jī)對戰(zhàn)

    查看全部
  • 二叉樹節(jié)點(diǎn)要素:

    索引 數(shù)據(jù) 左孩子指針 右孩子指針 父節(jié)點(diǎn)指針

    查看全部
  • 之前的是數(shù)組二叉樹

    現(xiàn)在是鏈表二叉樹

    查看全部
  • 數(shù)組2叉樹 刪除一個(gè)節(jié)點(diǎn) 該節(jié)點(diǎn)數(shù)據(jù)=0則可

    查看全部
  • 插入節(jié)點(diǎn),只需要將索要插入的節(jié)點(diǎn)內(nèi)容賦值給被插入的節(jié)點(diǎn)則可

    查看全部
  • 節(jié)點(diǎn)序列 根節(jié)點(diǎn)序列為n,則2n+1為根節(jié)點(diǎn)的左節(jié)點(diǎn)

    查看全部
首頁上一頁1234567下一頁尾頁

舉報(bào)

0/150
提交
取消
課程須知
應(yīng)該熟練掌握C++相關(guān)語法,重點(diǎn)掌握數(shù)組、結(jié)構(gòu)體及遞歸函數(shù),需要熟悉線性表和鏈表相關(guān)內(nèi)容
老師告訴你能學(xué)到什么?
通過課程的學(xué)習(xí),你將掌握樹的相關(guān)概念,數(shù)組二叉樹,鏈表二叉樹及二叉樹遞歸實(shí)現(xiàn)的前序遍歷、中序遍歷和后序遍歷

微信掃碼,參與3人拼團(tuán)

微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復(fù)購買,感謝您對慕課網(wǎng)的支持!