實現二叉樹的基本操作:建立、遍歷、計算深度、結點數、葉子數等。
輸入c,先序建立二叉樹,#表示空節點;
輸入h:計算二叉樹的高度;
輸入l:計算二叉樹的葉子個數;
輸入n:計算二叉樹節點總個數;
輸入1:先序遍歷二叉樹;
輸入2:中序遍歷二叉樹;
輸入3:後續遍歷二叉樹;
輸入f:查詢值=x的節點的個數;
輸入p:以縮格文字形式輸出所有節點。
測試輸入:
cabc##de#g##f###hl
n123
fap期待的輸出:
created success!
height=5.
leaf=3.
nodes=7.
preorder is:a b c d e g f .
inorder is:c b e g d f a .
postorder is:c g e f d b a .
the count of a is 1.
the tree is:ab
cdeg
f
#include #include #include using namespace std;
int aa=0;
class binarytree ;
class bintreenode //定義結點類
bintreenode(char x,bintreenode *left=null,bintreenode *right=null ):data(x),leftchild(left),rightchild(right) //gouzao
~bintreenode ( ) //析構函式
private:
bintreenode *leftchild,*rightchild; //左、右子女鏈域
char data; //資料域
};class binarytree
binarytree(char value)
~binarytree()
void createbintree( )//建立二叉樹
bintreenode *rightchild (bintreenode *current )
int height( )
int size( )
int leaf()
bintreenode *getroot ( ) const
void preorder( )
};void binarytree ::createbintree(bintreenode* & subtree) //私有函式: 建立根為subtree的子樹
else
subtree = null;
}int binarytree ::height(bintreenode * subtree )//數的高度
int binarytree ::size( bintreenode * subtree ) //私有函式,計算根指標為subtree的二叉樹中的結點個數
int binarytree::leaf(bintreenode *subtree) //私有函式,計算根指標為subtree的二叉樹中的葉子個數
void binarytree ::inorder ( bintreenode *subtree )
}void binarytree ::preorder( bintreenode *subtree )
}void binarytree ::pre( bintreenode *subtree,char a1) //遍歷尋找有幾個等於a1
}void binarytree ::postorder( bintreenode *subtree )
}int binarytree::output(bintreenode *subtree,int n)
}int main()
}return 0;
}
二叉樹的鏈式儲存
若用鍊錶儲存一棵二叉樹時,每個結點除資料域外,還有指向左孩子和右孩子的兩個指 針。在這種儲存結構中,n個結點的二叉樹共有 個指標域,其中有 個指標域是存放了位址,有 個指標是空指標。因為有n個節點,每個節點都存了乙個lchild,乙個rchild,所以共2n個指標域。因為除了根節點,其他所有的節點都...
二叉樹鏈式儲存操作
前言 二叉樹的儲存結構 1.二叉樹的順序儲存結構 利用性質5,對於完全二叉樹可以利用一維陣列儲存,如果不是完全二叉樹,則可以補空節點,使成為完全二叉樹在進行儲存,但是對於非完全二叉樹,可能要浪費很多的空間。2.二叉樹的鏈式儲存結構 二叉樹的鏈式儲存結構就是用指標建立二叉樹中節點之間的關係,二叉樹最常...
二叉樹鏈式儲存結構
由二叉樹定義得知,二叉樹的結點由乙個元素和分別指向其左 右子樹的兩個分支構成,則表示二叉樹的鍊錶中的結點至少包含3個域,如下圖。二叉樹建立 程式是如何建立出二叉樹的?以下圖為例 從主函式開始執行 定義乙個bitnode型別的指標root,將指標root的位址賦給t t是乙個bitnode型別指標的指...