根節點:根節點是乙個沒有雙親結點的結點,一課樹最多只能有乙個根節點
結點:樹上面的所有資料都是結點,但結點不只包括資料,還包含指向子樹的分支
結點的度:結點擁有子樹或分支的個數
樹的度:樹中各結點的最大值
結點的層數:根結點的層數為0,其他結點的層數等於其父結點的層數加1
樹的深度:樹中所有結點層數的最大值
樹的高度:數的深度加1
葉子結點:沒有孩子結點的結點
ab c
d e f g
h i
樹的前序遍歷操作定義為:
訪問根結點
按照從左到右的順序前序遍歷根結點的每一棵子樹。
a b d e h i f c g
樹的後序遍歷操作定義為:
按照從左到右的順序後序遍歷根結點的每一棵子樹
訪問根結點。
d h i e f b g c a
樹的層序遍歷操作定義為:
從樹的第一層(即根結點)開始,自上而下逐層遍歷,在同一層中,按從左到右的順序對結點逐個訪問。
a b c d e f g h i
二叉樹的遍歷:
ab c
d e f
g前序遍歷
訪問根結點
前序遍歷根結點的左子樹
前序遍歷根結點的右子樹。
a b d g c e f
中序(根)遍歷
中序遍歷根結點的左子樹
訪問根結點
中序遍歷根結點的右子樹。
d g b a e c f
後序(根)遍歷
後序遍歷根結點的左子樹
後序遍歷根結點的右子樹
訪問根結點;
g d b e f c a
層序遍歷
二叉樹的層次遍歷是指從二叉樹的第一層開始,
從上至下逐層遍歷,在同一層中,則按從左到右的順序對結點逐個訪問。
a b c d e f g
二叉樹的順序儲存
以結點在完全二叉樹中的位置層序遍歷編號,按編號存入線性表
void create(char preorder,char inorder,int start_p, int end_p,int start_i,int end_i, char data,int root)
}data[root]=preorder[start_p];
create(preorder,inorder,start_p+1,start_p+k-start_i,start_i,k-1,data, 2*root);
create(preorder,inorder,start_p+k-start_i+1,end_p,k+1,end_i,data,2*root+1);
}return ;
}int main()
二叉鍊錶
結點結構
lchild data rchild
左孩子 資料 右孩子
template
struct node
;類的宣告
template
class bitree
void inorder()
void postorder()
void levelorder();
private:
binode*root;
binode* creat( );
void release(binode*root);
void preorder(binode*root);
void inorder(binode*root);
void postorder(binode*root);
void levelorder(binode*root);
};前序遍歷(遞迴)
template
void bitree::preorder(binode*root)
}template
void bitree::preorder(binode*root)
}template
void bitree::preorder(binode*root)
}template
void bitree::preorder(binode*root)
}中序遍歷(遞迴)
template
class bitree
void inorder()
void postorder()
void levelorder();
private:
binode*root;
void creat(binode*& root);
void release(binode*root);
void preorder(binode*root);
void inorder(binode*root);
void postorder(binode*root);
void levelorder(binode*root);
};template
void bitree::creat(binode* &root ) }
統計葉子節點的數目
增加乙個資料成員,leafcount, 初值為0
對樹進行遍歷。 如果乙個節點是葉子,則將leafcount+1;
可以在前序、中序或後序的遍歷過程中進行計算。
演算法分析
從根節點出發
判斷當前節點是否是葉子節點,如果是,則葉子數+1
否則,在左子樹中遍歷,並統計葉子節點的數目,在右子樹中進行遍歷,並統計葉子節點的數目
template
void bitree:: countleaf(bitreenode* root)
}return;
}
二叉樹 滿二叉樹與完全二叉樹
二叉樹 binary tree 是n n 0 個元素的有限集合,該集合為空或者為由乙個稱為 根 的元素及兩個不相交的 被分別稱為左子樹和右子樹的二叉樹組成 二叉樹的基本特點 每個結點最多有兩棵子樹 左子樹和右子樹是有順序的,且不可顛倒 圖一1 結點 二叉樹中的每乙個元素都稱為結點。通常二叉樹的許多名...
樹與二叉樹
樹是一類重要的非線性資料結構,是以分支關係定義的層次結構 定義 樹 tree 是n n 0 個結點的有限集t,其中 n 0時為空樹 n 0時,有且僅有乙個特定的結點,稱為樹的根 root 當n 1時,其餘結點可分為m m 0 個互不相交的有限集t1,t2,tm,其中每乙個集合本身又是一棵樹,稱為根的...
樹與二叉樹
建立 先序二叉樹,中序二叉樹,後序二叉樹。給定兩種遍歷序列 前序中序或後序中序 重塑二叉樹 遍歷 判斷乙個節點是否存在於二叉樹中 二叉樹的遍歷 先序,中序,後序 遞迴 非遞迴 層次遍歷 從上到下或從下到上列印 zigzag遍歷方式層次遍歷 二叉樹性質 二叉樹中葉子節點的個數 二叉樹第k層節點數目 二...