代码
1 <?php 2 3 /*---------------- 4 + 二叉树 5 ----------------*/ 6 7 class BTree 8 { 9 // 数据域 10 protected $data; 11 // 左子树 12 protected $leftNode; 13 // 右子树 14 protected $rightNode; 15 16 public function __construct($data = 0) 17 { 18 $this->data = $data; 19 } 20 21 /** 22 * @param object $leftNode 23 */ 24 public function setLeftNode(BTree $leftNode = null) 25 { 26 $this->leftNode = $leftNode; 27 } 28 29 /** 30 * @param object $rightNode 31 */ 32 public function setRightNode(BTree $rightNode = null) 33 { 34 $this->rightNode = $rightNode; 35 } 36 37 public function getLeftNode() 38 { 39 // 判断自己瞎写的,当访问子节点不存在的时候,就重新实例化当前节点,data默认赋值为0,表示空节点。反正能够表示子节点不存在哈哈 40 if (!isset($this->leftNode)) { 41 return new self; 42 } 43 return $this->leftNode; 44 } 45 46 public function getRightNode() 47 { 48 if (!isset($this->leftNode)) { 49 return new self; 50 } 51 return $this->rightNode; 52 } 53 54 public function getData() 55 { 56 return $this->data; 57 } 58 } 59 60 $rootNode = new BTree(1); 61 $zuo1Node = new BTree(2); 62 $you1Node = new BTree(3); 63 $zuo21Node = new BTree(4); 64 $you21Node = new BTree(5); 65 $zuo22Node = new BTree(6); 66 $rootNode->setLeftNode($zuo1Node); 67 $rootNode->setRightNode($you1Node); 68 $zuo1Node->setLeftNode($zuo21Node); 69 $zuo1Node->setRightNode($you21Node); 70 $you1Node->setLeftNode($zuo22Node); 71 echo '访问的节点不存在时,返回空,0表示空节点,或者设置为null也行.<br>'; 72 print_r($rootNode->getLeftNode()->getLeftNode()->getRightNode()->getData()); 73 echo "<br>访问存在的节点,可以正常获取数据<br>"; 74 print_r($rootNode->getLeftNode()->getRightNode()->getData());