完整的**以及執行結果
二叉樹是用有限個線段連線的有限個節點的集合,有乙個唯一的特殊節點叫根節點,其餘的節點,要麼是樹中某個節點的左節點,要麼是樹中某個節點的右節點。某個節點的左節點與某個節點的右節點通過線段連線。
二叉樹有一些屬性,能幫助了解二叉樹。
1、二叉樹的每個元素都恰好有兩個子樹,其中可能有乙個或兩個是空的。
2、子樹分左子樹和右子樹,順序不能混淆
3、邊數=節點數-1:一顆二叉樹的連線線段數目,剛好是它的節點數目減一。
4、層數:節點有對應的層數,根節點在第一層,子節點的層數為父節點的層數加一。
4、高度:二叉樹的最大層數,稱為高度。
5、已知高度為h,則最少節點數為h,最大節點數為2的h次方-1。
6、滿二叉樹:二叉樹的節點個數為2的h次方-1.
7、完全二叉樹:將某二叉樹的節點從左往右、從上往下依次編號(1、2、。。。),對應位置的編號與相同高度的滿二叉樹的對應節點的編號完全相同。
遍歷分為前序遍歷、中序遍歷、後序遍歷。
二叉樹的當前節點:一般指中間的節點、父節點,要相對某個子樹而言。比如:第二層的節點的當前節點就是根節點。
前序遍歷:不管在什麼情況下,都先訪問當前節點,再訪問當前節點的左節點,最後訪問當前節點的右節點。
中序遍歷:不管在什麼情況下,都先訪問當前節點的左節點,再訪問當前節點,最後訪問當前節點的右節點。
後序遍歷:不管在什麼情況下,都先訪問當前節點的左節點,再訪問當前節點的右節點,最後訪問當前節點。
將每乙個節點,用乙個結構體描述。
基礎需要:值、左節點、右節點
**如下
templatestruct binarytreenode
binarytreenode(const t & theelement)
//賦值乙個節點的時候,順便賦值左節點、右節點
binarytreenode(const t &theelement,binarytreenode* theleftchild,binarytreenode* therightchild)
};
節點的尺寸:總的節點數。
class linkbinarytree
~linkbinarytree()
void maketree(t element,linkbinarytree&left,linkbinarytree&right);//建立乙個節點
void release(binarytreenode* btreenode_struct);//釋放
//先序遍歷
void preorderoutput();
//中序遍歷
void inorderoutput();
//後序遍歷
void postorderoutput();
int getsize()const
bool empty()
private:
int treesize;
binarytreenode*root;
void preorderoutput(binarytreenode* btreenode_struct);
void inorderoutput(binarytreenode* btreenode_struct);
void postorderoutput(binarytreenode* btreenode_struct);
};templateinline void linkbinarytree::maketree(t element, linkbinarytree&left, linkbinarytree&right)
templateinline void linkbinarytree::release(binarytreenode* btreenode_struct)
}templateinline void linkbinarytree::preorderoutput()
templateinline void linkbinarytree::inorderoutput()
templateinline void linkbinarytree::postorderoutput()
templateinline void linkbinarytree::preorderoutput(binarytreenode* btreenode_struct)
}templateinline void linkbinarytree::inorderoutput(binarytreenode* btreenode_struct)
}templateinline void linkbinarytree::postorderoutput(binarytreenode* btreenode_struct)
}
#pragma once
templatestruct binarytreenode
binarytreenode(const t & theelement)
binarytreenode(const t &theelement,binarytreenode* theleftchild,binarytreenode* therightchild)
};
#pragma once
#include"binarytreenode.h"
#includeusing namespace std;
templateclass linkbinarytree
~linkbinarytree()
void maketree(t element,linkbinarytree&left,linkbinarytree&right);//建立乙個節點
void release(binarytreenode* btreenode_struct);//釋放
void preorderoutput();
void inorderoutput();
void postorderoutput();
int getsize()const
bool empty()
private:
int treesize;
binarytreenode*root;
void preorderoutput(binarytreenode* btreenode_struct);
void inorderoutput(binarytreenode* btreenode_struct);
void postorderoutput(binarytreenode* btreenode_struct);
};templateinline void linkbinarytree::maketree(t element, linkbinarytree&left, linkbinarytree&right)
templateinline void linkbinarytree::release(binarytreenode* btreenode_struct)
}templateinline void linkbinarytree::preorderoutput()
templateinline void linkbinarytree::inorderoutput()
templateinline void linkbinarytree::postorderoutput()
templateinline void linkbinarytree::preorderoutput(binarytreenode* btreenode_struct)
}templateinline void linkbinarytree::inorderoutput(binarytreenode* btreenode_struct)
}templateinline void linkbinarytree::postorderoutput(binarytreenode* btreenode_struct)
}
#include"linkbinarytree.h"
int main()
{ //linkbinarytreea, b, c;
a, a);
linkbinarytreea, x, y, z;
y.maketree(1, a, a);
z.maketree(2, a, a);
x.maketree(3, y, z);
y.maketree(4, x, a);
cout << "先序遍歷:"<
資料結構二叉樹c 描述
資料結構之二叉樹 基本術語 度 結點的子結點的個數 樹高度 深度 樹中結點的最大層數 分支結點 度大於 0的結點 葉子結點 度為 0的結點 結點層次 根結點為第一層,往下遞增 結點深度 從根結點自頂向下逐層累加 有序樹 從左到右,子樹有序 交換子結點位置樹不同 無序樹 交換子結點後樹是相同的 兩種特...
資料結構和演算法 二叉樹
二叉樹 樹的每個節點最多只能有兩個子節點。樹的效率 查詢節點的時間取決於這個節點所在的層數,每一層最多有2n 1個節點,總共n層共有2n 1個節點,那麼時間複雜度為o logn 底數為2。二叉搜尋樹要求 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 若它的右子樹不空,則右子樹上所有結...
資料結構演算法 二叉樹
二叉樹資料結構 bintree.h include templateclass bintree template class treenode type data treenode lchild 左,右子樹 treenode rchild template class bintree void cr...