日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[数据结构]二叉树

發布時間:2025/7/14 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [数据结构]二叉树 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

(1)二叉樹的概念?

二叉樹(Binary Tree)是個有限元素的集合,該集合或者為空、或者由一個稱為根(root)的元素及兩個不相交的、被分別稱為左子樹和右子樹的二叉樹組成。當集合為空時,稱該二叉樹為空二叉樹。
滿二叉樹:?在一棵二叉樹中,如果所有分支結點都存在左子樹和右子樹,并且所有葉子結點都在同一層上,這樣的一棵二叉樹稱作滿二叉樹。
完全二叉樹:一棵深度為k的有n個結點的二叉樹,對樹中的結點按從上至下、從左到右的順序進行編號,如果編號為i(1≤i≤n)的結點與滿二叉樹中編號為i的結點在二叉樹中的位置相同,則這棵二叉樹稱為完全二叉樹

(2)二叉樹的基本操作與存儲

?二叉樹的二叉鏈表存儲表示可描述為

[cpp]?view plaincopy
  • typedef?struct?BiTNode{??
  • elemtype?data;??
  • struct?BiTNode?*lchild,rchild;??
  • }BiTNode,*BiTree;??

  • 建立一個二叉樹,使其只有頭結點

    [cpp]?view plaincopy
  • int?Initiate(BiTree?*bt)??
  • {??
  • ????if((bt=(BiTNode?*)malloc(sizeof(BiTNode))==NULL)??
  • ????????return?0;??
  • ????bt->lchild=NULL;??
  • ????bt->rchild=NULL;??
  • ????return?1;??
  • }??

  • (3)二叉樹的遍歷

    二叉樹的遍歷是指按照某種順序訪問二叉樹中的每個結點,使每個結點被訪問一次且僅被訪問一次。
    先序遍歷:
    (1)訪問根結點;
    (2)先序遍歷根結點的左子樹;
    (3)先序遍歷根結點的右子樹。
    ??? 先序遍歷二叉樹的遞歸算法如下:

    [cpp]?view plaincopy
  • void?PreOrder(BiTree?bt)??
  • {/*先序遍歷二叉樹bt*/??
  • ??if?(bt==NULL)?return;?????/*遞歸調用的結束條件*/??
  • ??Visite(bt->data);???????/*訪問結點的數據域*/??
  • ??PreOrder(bt->lchild);???/*先序遞歸遍歷bt的左子樹*/??
  • ??PreOrder(bt->rchild);???/*先序遞歸遍歷bt的右子樹*/????
  • }??
  • ?

    中序遍歷:先左子樹,再根,再右子樹
    后序遍歷:先遍歷樹左子樹,再右子樹,最后根

    先序遍歷的非遞歸實現
    可以利用棧的后進先出的特點實現:

    [cpp]?view plaincopy
  • void?NRPreOrder(BiTree?bt)??
  • ??
  • {/*非遞歸先序遍歷二叉樹*/??
  • ??BiTree?stack[MAXNODE],p;??
  • ??int?top;??
  • ??if?(bt==NULL)?return;??
  • ??top=0;??
  • ??p=bt;??
  • ??while(!(p==NULL&&top==0))??
  • ?????{?while(p!=NULL)??
  • ??????????{?Visite(p->data);????/*訪問結點的數據域*/??
  • ????????????if?(top<MAXNODE-1)??/*將當前指針p壓棧*/??
  • ?????????????{?stack[top]=p;??
  • ???????????????top++;??
  • ??????????????}??
  • ????????????else?{?printf(“棧溢出”);??
  • ???????????????????return;??
  • ??????????????????}??
  • ????????????p=p->lchild;?????????/*指針指向p的左孩子*/??
  • ???????????}??
  • ??????????if?(top<=0)?return;?????/*棧空時結束*/??
  • ??????????else{?top--;??
  • ????????????????p=stack[top];????????????/*從棧中彈出棧頂元素*/??
  • ????????????????p=p->rchild;?????????????/*指針指向p的右孩子結點*/??
  • ???????????????}??
  • ??????}??
  • }??

  • 數據結構—二叉樹

    轉載于:https://www.cnblogs.com/zhiliao112/p/4232215.html

    總結

    以上是生活随笔為你收集整理的[数据结构]二叉树的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。