typedef structbnode;
typedef bnode *bitree;//結點指標型別
6.2.1二叉樹遍歷演算法//先序遍歷
void preorder(bnode *t)
}
6.2.2遍歷演算法的簡單變化
例6.1 設計演算法按先序方式輸出二叉樹葉子節點的值
void preorder(bnode *t)
}// 相關習題
// 設計演算法以中序輸出度為2的結點值
void inorder(bnode *t)
}
例6.2設計演算法求二叉樹t的結點數void inorder(bnode*t)
}
例6.3求度為2的結點數void inorder(bnode*t)
}
例6.4設計演算法以後序方式輸出前k個結點void postorder(bnode *t)
}
例6.5求兩個整數的最大公因子int hcf(int m,int n)
例6.6利用遞迴求二叉樹結點數//整數函式形式
int nodes(bnode* t)
例6.7求結點數並賦予引數n//以引數返回形式
void nodes(bnode *t,int &n)
}
例6.8將結點數累加到n中void nodes(bnode*t,int &n)
}
例6.9將結點數累加到全程變數n中void nodes(bnode *t)
}
例6.10將結點數賦給nvoid nodes(bnode *t)
}
例6.11求二叉樹的葉子結點資料int leaf(bnode *t)
}
例6.12求二叉樹的高度//整數函式形式
int high(bnode *t)+1;
}//帶變參形式
void high(bnode *t,int &h)
}
例6.13釋放所有結點的空間void postorder(bnode *t)
}
例6.14判斷是否為二叉排序樹void adj(bnode *t,datatype prev,bool flag)
prev=t->data;
adj(t->rchild,prev,flag);
}}
//孩子兄弟表示法
typedef structtnode;
typedef tnode*tree;
//森林的先序遍歷
void preorder(tnode*t)
}//對一棵樹的完整遍歷
void preorder_tree(tnode*t)
}//直接面向一顆樹的遍歷演算法
void preorder_tree(tnode*t)
}}
例6.15求樹或森林的葉子節點數int leaf(tnode*t)
return s;
}}
例6.16求樹或森林的高度int high(tnode*t);
p=p->nextbrother;
return h+1;}}
}
例6.17設計演算法以拓展二叉樹先序作為輸入構建二叉樹void create_tree(bitree *t)
}
例6.18建立二分查詢的判定樹void create(bitree &t,int low,int high)
}
例6.19一顆完全二叉樹順序方式儲存在陣列a[1+n]中,設計演算法構造該二叉鍊錶void create(bitree &t,int i)
}
例6.20用先序pre[n]和中序pin[n]構建二叉鍊錶void create(bitree &t,int i1,int i2,int k)
}
例6.21將二叉鍊錶按順序存到陣列a中void trans(bitree &t,int i)
}
第六章 二叉樹
1.基礎知識 二叉樹是一種非線性結構,而前面討論的都是線性結構,兩種是有本質區別的。它在現實社會中存在著很多的模型。例如,人類社會的族譜,社會的各種組織分層,國家,學校,單位的各種機構,這些都是用樹和二叉樹來表示的。其中二叉樹相當的實用。我為什麼這麼說呢,因為二叉樹很有規則性,它的一系列操作都是相當...
第六章 樹和二叉樹
一 基本術語 1 節點 乙個資料元素機器若干指向其子樹的分支。2 節點的度 節點所擁有的子樹的顆樹。3 樹的度 樹中節點度的最大值。二 二叉樹 性質 對任意一棵二叉樹,若其葉子節點數為n0,度為二的節點數為n2,則n0 n2 1 1 滿二叉樹 一顆深度為k且有2的k次方 1個節點的二叉樹為滿二叉樹。...
第六章 數和二叉樹
樹形結構是一種重要的非線性資料結構 6.1樹的定義和基本術語 1.樹是n個節點的有限集 1 有且只有乙個特定的被稱為根的節點 2 n 1時其餘節點可分為m個互不相交的有限集,其中每乙個集合本身又是一棵樹,稱為根的子樹 6.2二叉樹 1.二叉樹是每個節點至多有兩顆子樹 即二叉樹中不存在度大於二的節點 ...