樹形結構是一對多的非線性結構,非常類似於自然界中的樹,資料元素之間既有分支關係,又有層次關係。
樹形結構有樹和二叉樹兩種,樹的操作實現比較複雜,但樹可以轉換為二叉樹進行處理。
二叉樹的儲存結構主要有三種:順序儲存結構、二叉鍊錶儲存結構和三叉鍊錶儲存結構。
採用順序儲存結構,是對非線性資料結構線性化,用線性結構來表示二叉樹的結點之間的邏輯關係,所以需要增加空間。
二叉樹的二叉鍊錶儲存結構可以非常方便地訪問乙個結點的子孫結點,但要訪問祖先結點非常困難。
二叉鍊錶儲存結構的類實現:
python codes:
class treenode:
def __init__(self,left=0,right=0,value=0):
self.left=left
self.right=right
self.value=value
class tree:
def __init__(self,root):
self.root=root
from tree import tree,treenode
node1=treenode(value=1)
node2=treenode(node1,0,2)
node3=treenode(value=3)
node4=treenode(value=4)
node5=treenode(node3,node4,5)
node6=treenode(node2,node5,6)
node7=treenode(node6,0,7)
node8=treenode(value=8)
root=treenode(node7,node8,10)
tree=tree(root)
"*****root->n7 ->n6 ->n5 ->n4 ->4*****"
print root.left.left.right.right.value
c++ codes:
#pragma once
#include "stdafx.h"
templateclass treenode
};templateclass tree
};
#pragma once
#include "stdafx.h"
#include "tree.h"
#include using std::cout;
using std::endl;
int main()
{ treenode*node1=new treenode(0,0,1);
treenode*node2=new treenode(0,0,2);
treenode*node3=new treenode(node1,node2,3);
treenode*node4=new treenode(0,0,4);
treenode*node5=new treenode(0,0,5);
treenode*node6=new treenode(node3,node4,6);
treenode*node7=new treenode(node5,node6,7);
treenode*node8=new treenode(0,0,8);
treenode*node9=new treenode(0,0,9);
treenode*node10=new treenode(node8,node9,10);
treenode*node11=new treenode(node10,0,11);
treenode*node12=new treenode(node7,node11,12);
tree*tree=new tree(node12);
//**********12 ->7 ->6 ->4
coutleft->right->right->value<
第5章 樹和二叉樹
1.樹是一類重要的非線性資料結構,樹形結構是以分支關係來定義的層次結構。在客觀世界中樹形結構廣泛存在,並應用於 人類社會的族譜 家譜 行政區域劃分管理 各種社會組織機構 在計算機領域中,用樹表示源程式的語法結構 在作業系統 os 中,檔案系統 目錄等組織結構也是用樹來表示的。本章的主要內容是 樹的邏...
第5章 樹和二叉樹
線性結構的資料元素是一對一的關係。非線性結構 樹形結構和圖狀結構。樹形結構是一對多的非線性結構,資料元素之間既有分支關係,又有層次關係。樹形結構由樹和二叉樹兩種,樹的操作實現比較複雜,但樹可以轉換為二叉樹進行處理。5.1樹 5.1.1樹的定義 樹 tree 是n個相同型別的資料元素的有限集合。樹中的...
第5章 樹和二叉樹 9
習題 5.9 編寫演算法,求二叉樹中分支結點的數目。c codes templateclass treenode templateclass tree int countbranchnode private int countbranchnodemethod treenode root int ma...