亚洲免费不卡_在线视频精品_国产尤物精品_久久久久网址_久久精品91_欧美va天堂在线_狠狠入ady亚洲精品_亚洲午夜精品福利_国产精品草草_午夜精品久久99蜜桃的功能介绍

PHP實現的線索二叉樹及二叉樹遍歷方法詳解
來源:易賢網 閱讀:1488 次 日期:2016-08-26 14:36:27
溫馨提示:易賢網小編為您整理了“PHP實現的線索二叉樹及二叉樹遍歷方法詳解”,方便廣大網友查閱!

本文實例講述了PHP實現的線索二叉樹及二叉樹遍歷方法。分享給大家供大家參考,具體如下:

<?php

  require 'biTree.php';

  $str = 'ko#be8#tr####acy#####';

  $tree = new BiTree($str);

  $tree->createThreadTree();

  echo $tree->threadList() . "\n";從第一個結點開始遍歷線索二叉樹

  echo $tree->threadListReserv();從最后一個結點開始反向遍歷

?>

biTree.php:

<?

  /**

   * PHP實現二叉樹

   *

   * @author zhaojiangwei

   * @since 2011/10/25 10:32

   */

  //結點類

  class Node{

    private $data = NULL;

    private $left = NULL;

    private $right = NULL;

    private $lTag = 0;

    private $rTag = 0;

    public function Node($data = false){

      $this->data = $data;

    }

    //我不喜歡使用魔術方法

    public function getData(){

      return $this->data;

    }

    public function setData($data){

      $this->data = $data;

    }

    public function getLeft(){

      return $this->left;

    }

    public function setLeft($left){

      $this->left = $left;

    }

    public function getRight(){

      return $this->right;

    }

    public function setRight($right){

      $this->right = $right;

    }

    public function getLTag(){

      return $this->lTag;

    }

    public function setLTag($tag){

      $this->lTag = $tag;

    }

    public function getRTag(){

      return $this->rTag;

    }

    public function setRTag($tag){

      $this->rTag = $tag;

    }

  }

  //線索二叉樹類

  class BiTree{

    private $datas = NULL;//要導入的字符串;

    private $root = NULL; //根結點

    private $leafCount = 0;//葉子結點個數

    private $headNode = NULL; //線索二叉樹的頭結點

    private $preNode = NULL;//遍歷線索化二叉樹時保存前一個遍歷的結點

    public function BiTree($datas){

      is_array($datas) || $datas = str_split($datas);

      $this->datas = $datas;

      $this->backupData = $this->datas;

      $this->createTree(TRUE);

    }

    //前序遍歷創建樹

    //$root 判斷是不是要創建根結點

    public function createTree($root = FALSE){

      if(emptyempty($this->datas)) return NULL;

      $first = array_shift($this->datas);

      if($first == '#'){

        return NULL;

      }else{

        $node = new Node($first);

        $root && $this->root = $node;

        $node->setLeft($this->createTree());

        $node->setRight($this->createTree());

        return $node;

      }

    }

    //返回二叉樹葉子結點的個數

    public function getLeafCount(){

      $this->figureLeafCount($this->root);

      return $this->leafCount;

    }

    private function figureLeafCount($node){

      if($node == NULL)

        return false;

      if($this->checkEmpty($node)){

        $this->leafCount ++;

      }else{

        $this->figureLeafCount($node->getLeft());

        $this->figureLeafCount($node->getRight());

      }

    }

    //判斷結點是不是葉子結點

    private function checkEmpty($node){

      if($node->getLeft() == NULL && $node->getRight() == NULL){

        return true;

      }

      return false;

    }

    //返回二叉樹深度

    public function getDepth(){

      return $this->traversDepth($this->root);

    }

    //遍歷求二叉樹深度

    public function traversDepth($node){

      if($node == NULL){

        return 0;

      }

      $u = $this->traversDepth($node->getLeft()) + 1;

      $v = $this->traversDepth($node->getRight()) + 1;

      return $u > $v ? $u : $v;

    }

    //返回遍歷結果,以字符串的形式

    //$order 按遍歷形式返回,前中后

    public function getList($order = 'front'){

      if($this->root == NULL) return NULL;

      $nodeList = array();

      switch ($order){

        case "front":

          $this->frontList($this->root, $nodeList);

          break;

        case "middle":

          $this->middleList($this->root, $nodeList);

          break;

        case "last":

          $this->lastList($this->root, $nodeList);

          break;

        default:

          $this->frontList($this->root, $nodeList);

          break;

      }

      return implode($nodeList);

    }

    //創建線索二叉樹

    public function createThreadTree(){

      $this->headNode = new Node();

      $this->preNode = & $this->headNode;

      $this->headNode->setLTag(0);

      $this->headNode->setLeft($this->root);

      $this->headNode->setRTag(1);

      $this->threadTraverse($this->root);

      $this->preNode->setRight($this->headNode);

      $this->preNode->setRTag(1);

      $this->headNode->setRight($this->preNode);

    }

    //線索化二叉樹

    private function threadTraverse($node){

      if($node != NULL){

        if($node->getLeft() == NULL){

          $node->setLTag(1);

          $node->setLeft($this->preNode);

        }else{

          $this->threadTraverse($node->getLeft());

        }

        if($this->preNode != $this->headNode && $this->preNode->getRight() == NULL){

          $this->preNode->setRTag(1);

          $this->preNode->setRight($node);

        }

        $this->preNode = & $node;//注意傳引用

        $this->threadTraverse($node->getRight());

      }

    }

    //從第一個結點遍歷中序線索二叉樹

    public function threadList(){

      $arr = array();

      for($node = $this->getFirstThreadNode($this->root); $node != $this->headNode; $node = $this->getNextNode($node)){

        $arr[] = $node->getData();

      }

      return implode($arr);

    }

    //從尾結點反向遍歷中序線索二叉樹

    public function threadListReserv(){

      $arr = array();

      for($node = $this->headNode->getRight(); $node != $this->headNode; $node = $this->getPreNode($node)){

        $arr[] = $node->getData();

      }

      return implode($arr);

    }

    //返回某個結點的前驅

    public function getPreNode($node){

      if($node->getLTag() == 1){

        return $node->getLeft();

      }else{

        return $this->getLastThreadNode($node->getLeft());

      }

    }

    //返回某個結點的后繼

    public function getNextNode($node){

      if($node->getRTag() == 1){

        return $node->getRight();

      }else{

        return $this->getFirstThreadNode($node->getRight());

      }

    }

    //返回中序線索二叉樹的第一個結點

    public function getFirstThreadNode($node){

      while($node->getLTag() == 0){

        $node = $node->getLeft();

      }

      return $node;

    }

    //返回中序線索二叉樹的最后一個結點

    public function getLastThreadNode($node){

      while($node->getRTag() == 0){

        $node = $node->getRight();

      }

      return $node;

    }

    //前序遍歷

    private function frontList($node, & $nodeList){

      if($node !== NULL){

        $nodeList[] = $node->getData();

        $this->frontList($node->getLeft(), $nodeList);

        $this->frontList($node->getRight(), $nodeList);

      }

    }

    //中序遍歷

    private function middleList($node, & $nodeList){

      if($node != NULL){

        $this->middleList($node->getLeft(), $nodeList);

        $nodeList[] = $node->getData();

        $this->middleList($node->getRight(), $nodeList);

      }

    }

    //后序遍歷

    private function lastList($node, & $nodeList){

      if($node != NULL){

        $this->lastList($node->getLeft(), $nodeList);

        $this->lastList($node->getRight(), $nodeList);

        $nodeList[] = $node->getData();

      }

    }

    public function getData(){

      return $this->data;

    }

    public function getRoot(){

      return $this->root;

    }

  }

?>

希望本文所述對大家PHP程序設計有所幫助。

更多信息請查看網絡編程
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點

版權所有:易賢網

亚洲免费不卡_在线视频精品_国产尤物精品_久久久久网址_久久精品91_欧美va天堂在线_狠狠入ady亚洲精品_亚洲午夜精品福利_国产精品草草_午夜精品久久99蜜桃的功能介绍
亚洲综合丁香| 亚洲一区二区四区| 久久狠狠久久综合桃花| 制服诱惑一区二区| 亚洲视频高清| 亚洲人成在线影院| 伊人久久成人| 亚洲精品资源| 亚洲免费不卡| 亚洲免费中文| 欧美激情亚洲| 国产精品videosex极品| 极品日韩av| 国产日韩一区二区三区| 亚洲一区二区高清视频| 久久激情视频| 精品成人在线| 亚洲在线一区| 狠狠色综合色区| 国产精品日韩一区二区| 久久一区二区三区超碰国产精品| 激情欧美丁香| 久久国产毛片| 亚洲精品1区| 久久国产一二区| 国产一区二区在线观看免费播放| 国产日韩一区| 亚洲视频综合| 美女91精品| 亚洲精美视频| 欧美日韩精品一本二本三本| 亚洲欧美精品| 韩国亚洲精品| 狼狼综合久久久久综合网| 亚洲国产一区二区三区a毛片| 久久亚洲欧洲| 国产精品夜夜夜| 国内自拍视频一区二区三区| 玖玖精品视频| 欧美一级久久| 一区二区动漫 | 六月天综合网| 伊人久久亚洲热| 欧美在线影院| 麻豆成人精品| 欧美资源在线| 亚洲欧美大片| 国产伦精品一区二区三区视频孕妇| 影音先锋久久| 狠狠久久综合婷婷不卡| 欧美~级网站不卡| 亚洲一区免费看| 一区二区三区免费看| 国产一在线精品一区在线观看| 欧美一区二区三区四区夜夜大片| 久久精品一区| 久久国产精品毛片| 亚洲日本久久| 亚洲国产精品视频一区| 国外成人免费视频| 免费久久99精品国产自| 夜夜夜久久久| 亚洲经典在线| 亚洲国产高清一区| 国产精品多人| 激情综合久久| 1024日韩| 亚洲一区亚洲| 欧美不卡在线| 国产主播精品| 最新成人av网站| 亚洲高清不卡一区| 国内久久精品| 在线一区亚洲| 久久久久se| 欧美日韩亚洲一区二区三区在线观看| 在线国产日韩| 亚洲视频1区| 噜噜噜久久亚洲精品国产品小说| 老司机精品导航| 狠狠色丁香久久综合频道 | 国产在线视频欧美一区二区三区| 欧美性色综合| 亚洲美女色禁图| 国产精品美女xx| 久久久亚洲一区| 国产在线一区二区三区四区| 一区二区三区三区在线| 欧美一区三区二区在线观看| 亚洲精品资源| 久久青草久久| 影音国产精品| 久久精品国产99精品国产亚洲性色| 国产精品av久久久久久麻豆网| 亚洲精选国产| 久久九九免费| 99人久久精品视频最新地址| 欧美日一区二区在线观看| 亚洲精品1区2区| 亚洲欧美日韩综合一区| 国产精品vip| 亚洲在线网站| 亚洲国产午夜| 欧美福利一区二区三区| 国产欧美日韩一区二区三区| 尹人成人综合网| 久久蜜桃精品| 亚洲一区免费| 中文网丁香综合网| 欧美a级片一区| av成人黄色| 国产一区二区三区四区hd| 久久国产精品久久w女人spa| 国产亚洲精品自拍| 欧美日韩一区二区视频在线观看| 久久福利影视| 国产亚洲欧美一区二区| 国户精品久久久久久久久久久不卡| 免费看亚洲片| 国产一区二区精品| 狠狠干综合网| 国内精品久久久久久久影视麻豆| 欧美激情偷拍| 欧美黄色一区二区| 国产欧美综合一区二区三区| 99精品国产一区二区青青牛奶| 亚洲毛片播放| 一本色道久久综合亚洲精品高清| 亚洲毛片网站| 亚洲日产国产精品| 欧美破处大片在线视频| 久久久久综合一区二区三区| 久久久久欧美精品| 亚洲深夜激情| 国产日韩一区二区三区| 亚洲欧洲精品一区二区三区波多野1战4| 国产一区视频在线观看免费| 亚洲高清资源| 一本色道久久综合亚洲精品高清 | 欧美色123| 欧美一区二区三区在线免费观看 | 欧美国产高清| 欧美一区免费视频| 亚洲影音先锋| 免费精品视频| 欧美在线播放一区| 香蕉国产精品偷在线观看不卡| 免费不卡亚洲欧美| 亚洲一区二区三区免费在线观看| 香蕉久久夜色精品国产| 久久精品导航| 国产精品国产三级国产专区53| 在线成人黄色| 亚洲欧美日韩综合国产aⅴ| 麻豆精品91| 狠狠色噜噜狠狠狠狠色吗综合| 中文精品视频| 久久久999| 欧美午夜视频在线| 狠狠88综合久久久久综合网| aa国产精品| 久久av二区| 欧美网站在线| 国产精品乱看| 欧美区国产区| aa成人免费视频| 久久久999| 精品69视频一区二区三区Q| 亚洲另类视频| 欧美激情在线| 亚洲专区一区二区三区| 国产中文一区| 久久国产精品高清| 午夜国产精品视频| 狠狠色狠狠色综合人人| 国产精品毛片一区二区三区 | 欧美va天堂| 99亚洲视频| 欧美区国产区| 亚洲女人av| 1024日韩| 亚洲承认在线| 欧美黄免费看| 亚洲专区免费| 亚洲伦理一区| 欧美日本久久| 媚黑女一区二区| 日韩视频在线播放| 久久亚洲欧洲| 亚洲深夜激情| 一区免费视频| 欧美日韩天天操| 久久三级视频| 亚洲综合不卡| 国产视频一区三区| 国产精品久久| 欧美日韩伊人| 亚洲欧美综合| 老牛影视一区二区三区| 国产一区白浆| 国产精品久久波多野结衣| 亚洲精品乱码| 99热这里只有成人精品国产| av成人国产| 9国产精品视频| 在线免费高清一区二区三区| 亚洲国产精品久久久久婷婷老年| 亚洲一二区在线| 亚洲夜间福利| 亚洲黄页一区| aa国产精品| 久久在线91| 可以看av的网站久久看| 1024精品一区二区三区| 欧美精品国产一区| 国产农村妇女毛片精品久久莱园子| 9国产精品视频| 亚洲欧洲在线一区| 欧美日韩综合网| 欧美日韩一区二区国产| 欧美日本一区二区高清播放视频| 欧美精品aa| 国内一区二区三区| 欧美不卡一区| 国产精品分类| 亚洲国产精品毛片| 黄色一区二区三区四区| 亚洲高清资源| 一本久久综合| 亚洲在线播放| 欧美激情第六页| 欧美激情一区| 好看不卡的中文字幕| 亚洲国产成人不卡| 亚洲天堂偷拍| 国产精品入口66mio| 久久久精品性| 狠狠色噜噜狠狠色综合久| 亚洲精品韩国| 可以看av的网站久久看| 亚洲成色精品| 久久久久久久久久久一区| 韩日欧美一区| 欧美亚洲自偷自偷| 久热精品视频| 亚洲精品字幕| 欧美日韩网站| 久久aⅴ国产紧身牛仔裤| 国产精品xxx在线观看www| 国产精品一页| 国产精品初高中精品久久| 亚洲免费高清| 欧美日韩综合久久| 日韩亚洲国产欧美| 亚洲欧美久久久久一区二区三区| 精品69视频一区二区三区Q| 香蕉久久夜色| 亚洲伦理一区| 亚洲一级特黄| 久久午夜精品一区二区| 一区二区三区四区五区视频| 一区视频在线| 国产一区亚洲| 女人色偷偷aa久久天堂| 99伊人成综合| 亚洲成人中文| 黄色成人91| 欧美涩涩视频| 欧美精品一区在线| 国产欧美日韩一区二区三区| 亚洲精品欧美| 永久域名在线精品| 久久久亚洲一区| 噜噜噜久久亚洲精品国产品小说| 香蕉精品999视频一区二区 | 鲁鲁狠狠狠7777一区二区| 亚洲国产国产亚洲一二三| 欧美在线高清| 久久精品欧美| 六月婷婷一区| 久久狠狠一本精品综合网| 国产精品美女久久久浪潮软件| 一区二区三区av| 一本色道88久久加勒比精品| aa国产精品| aa日韩免费精品视频一| 日韩亚洲一区在线播放| 亚洲精品偷拍| 亚洲精品影视| a91a精品视频在线观看| 夜久久久久久| 亚洲专区欧美专区| 国产欧美日韩一区二区三区| 国产亚洲激情| 噜噜噜躁狠狠躁狠狠精品视频| 久久久久久久久久久一区| 久久精品女人| 国产精品hd| 亚洲日本视频| 国产农村妇女毛片精品久久莱园子| 久久成人亚洲| 欧美日本一区| 亚洲精品一区二区三区av| 一本不卡影院| 久久精品中文字幕一区二区三区| 欧美日韩免费高清| 欧美日本一区| 亚洲精选在线| 女女同性女同一区二区三区91| 精久久久久久| 久久国产一二区| 一区福利视频| 久久激情视频| 狠狠爱综合网| 亚洲欧美卡通另类91av| 欧美高清不卡| 亚洲美女色禁图| 久久久久久穴| 亚洲国产日韩欧美| 亚洲人久久久| 久久精品国产第一区二区三区最新章节 | 久久久水蜜桃| 国产精品v欧美精品∨日韩| 亚洲精品色图| 女女同性女同一区二区三区91 | 亚洲国产清纯| 久热re这里精品视频在线6| 精品不卡视频| 欧美在线视频二区| 国内揄拍国内精品久久| 午夜在线视频一区二区区别 | 久久亚洲综合网| 亚洲人www| 欧美日韩一区二区三区四区在线观看 | 欧美日韩国产免费观看| 一本一本久久| 亚洲天堂男人| 欧美精品亚洲精品| 亚洲人久久久| 亚洲小说区图片区| 亚洲在线日韩| 一区二区三区精品视频在线观看| 雨宫琴音一区二区在线| 欧美精品一级| 新67194成人永久网站| 亚洲精品三级| 伊人久久婷婷色综合98网| 欧美激情五月| 欧美aa国产视频| 久久婷婷国产综合尤物精品| 亚洲一区二区毛片| 欧美日韩mv| 欧美不卡在线| 欧美二区在线| 午夜久久99| 欧美啪啪一区| 欧美日韩一区二区三区在线视频| 欧美激情第六页| 午夜精品一区二区三区四区| 欧美成人国产| 欧美精品一区二区三区在线看午夜| 久久久精品午夜少妇| 先锋影音久久久| 美女久久一区| 欧美黄色一级视频| 美女久久网站| 欧美区高清在线| 国产精品v欧美精品∨日韩| 欧美天天在线| 雨宫琴音一区二区在线| 亚洲黑丝一区二区| 在线国产欧美| 亚洲精品九九| 国产欧美日韩综合一区在线播放| 亚洲中字在线| 欧美国产高潮xxxx1819| 亚洲小说欧美另类婷婷| 亚洲人体一区| 亚洲永久免费| 欧美fxxxxxx另类| 好看的av在线不卡观看| 亚洲国产精品第一区二区| 99精品热视频只有精品10| 亚洲一区精彩视频| 亚洲一区高清| 欧美久久综合| 亚洲精品美女久久7777777| 国产伦精品一区二区三区视频孕妇| 久久久久久黄| 在线欧美日韩| 久久成人精品| 亚洲一级高清| 久久精品二区| 亚洲黑丝一区二区| 99亚洲一区二区| 欧美激情在线| 国产美女诱惑一区二区| 国产精品二区三区四区| 国产乱码精品一区二区三区不卡| 国产精品theporn|