你可以把自己遇到的問題寫出來,知道的網(wǎng)友就會幫你解答了,另外你還需要多學習一些Java的知識,這樣才不至于解決不了問題。這里給你學習Java編程語言的一些小建議:
成都創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),原州企業(yè)網(wǎng)站建設(shè),原州品牌網(wǎng)站建設(shè),網(wǎng)站定制,原州網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,原州網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
1、多買幾本Java的書籍,不要看電子書。
2、對Java基礎(chǔ)數(shù)據(jù)類型有一個了解。
3、學會各種類型的操作方法。
4、了解函數(shù)和類的概念。
5、動手實踐,找小項目練習。
6、零基礎(chǔ)的同學在扣丁學堂看一些Java視頻教程學習一下。
學習Java的關(guān)鍵是看你自己的學習能力和毅力,只要堅持就會有收貨的。
代碼實現(xiàn)[一]部分
package ChapterEight;
class Tree {
class Node {
public long value;
public Node leftChild;
public Node rightChild;
public Node(long value) {
this.value = value;
leftChild = null;
rightChild = null;
}
}
public Node root;
public Tree() {
root = null;
}
// 向樹中插入一個節(jié)點
public void insert(long value) {
Node newNode = new Node(value);
// 樹是空的
if (root == null)
root = newNode;
else {
Node current = root;
Node parentNode;
while (true) {
parentNode = current;
if (value current.value) {
current = current.leftChild;
// 要插入的節(jié)點為左孩子節(jié)點
if (current == null) {
parentNode.leftChild = newNode;
return;
}
} else {
// 要插入的節(jié)點為右孩子節(jié)點
current = current.rightChild;
if (current == null) {
parentNode.rightChild = newNode;
return;
}
}
}
}
}
// 先續(xù)遍歷樹中的所有節(jié)點
public void preOrder(Node currentRoot) {
if (currentRoot != null) {
System.out.print(currentRoot.value + " ");
preOrder(currentRoot.leftChild);
preOrder(currentRoot.rightChild);
}
}
// 中續(xù)遍歷樹中的所有節(jié)點
public void inOrder(Node currentNode) {
if (currentNode != null) {
inOrder(currentNode.leftChild);
System.out.print(currentNode.value + " ");
inOrder(currentNode.rightChild);
}
}
// 后續(xù)遍歷樹中的所有節(jié)點
public void postOrder(Node currentNode) {
if (currentNode != null) {
postOrder(currentNode.leftChild);
postOrder(currentNode.rightChild);
System.out.print(currentNode.value + " ");
}
}
public void traverse(int traverseType) {
switch (traverseType) {
case 1:
preOrder(root);
break;
case 2:
inOrder(root);
break;
case 3:
postOrder(root);
break;
default:
break;
}
// 依據(jù)樹節(jié)點的值刪除樹中的一個節(jié)點
public boolean delete(int value) {
// 遍歷樹過程中的當前節(jié)點
Node current = root;
// 要刪除節(jié)點的父節(jié)點
Node parent = root;
// 記錄樹的節(jié)點為左孩子節(jié)點或右孩子節(jié)點
boolean isLeftChild = true;
while (current.value != value) {
parent = current;
// 要刪除的節(jié)點在當前節(jié)點的左子樹里
if (value current.value) {
isLeftChild = true;
current = current.leftChild;
}
// 要刪除的節(jié)點在當前節(jié)點的右子樹里
else {
isLeftChild = false;
current = current.rightChild;
}
// 在樹中沒有找到要刪除的節(jié)點
if (current == null)
return false;
}
// 要刪除的節(jié)點為葉子節(jié)點
if (current.leftChild == null current.rightChild == null) {
// 要刪除的節(jié)點為根節(jié)點
if (current == root)
root = null;
// 要刪除的節(jié)點為左孩子節(jié)點
else if (isLeftChild)
parent.leftChild = null;
// 要刪除的節(jié)點為右孩子節(jié)點
else
parent.rightChild = null;
}
// 要刪除的節(jié)點有左孩子節(jié)點,沒有右孩子節(jié)點
else if (current.rightChild == null) {
// 要刪除的節(jié)點為根節(jié)點
if (current == null)
root = current.leftChild;
// 要刪除的節(jié)點為左孩子節(jié)點
else if (isLeftChild)
parent.leftChild = current.leftChild;
// 要刪除的節(jié)點為右孩子節(jié)點
else
parent.rightChild = current.leftChild;
}
// 要刪除的節(jié)點沒有左孩子節(jié)點,有右孩子節(jié)點
else if (current.leftChild == null) {
// 要刪除的節(jié)點為根節(jié)點
if (current == root)
root = root.rightChild;
// 要刪除的節(jié)點為左孩子節(jié)點
else if (isLeftChild)
parent.leftChild = current.rightChild;
// 要刪除的節(jié)點為右孩子節(jié)點
else
parent.rightChild = current.rightChild;
}
// 要刪除的接節(jié)點既有左孩子節(jié)點又有右孩子節(jié)點
else {
Node successor = getSuccessor(current);
// 要刪除的節(jié)點為根節(jié)點
if (current == root)
root = successor;
// 要刪除的節(jié)點為左孩子節(jié)點
else if (isLeftChild)
parent.leftChild = successor;
// 要刪除的節(jié)點為右孩子節(jié)點
else
parent.rightChild = successor;
}
return true;
}
// 找到要刪除節(jié)點的替補節(jié)點
private Node getSuccessor(Node delNode) {
// 替補節(jié)點的父節(jié)點
Node successorParent = delNode;
// 刪除節(jié)點的替補節(jié)點
Node successor = delNode;
Node current = delNode.rightChild;
while (current != null) {
// successorParent指向當前節(jié)點的上一個節(jié)點
successorParent = successor;
// successor變?yōu)楫斍肮?jié)點
successor = current;
current = current.leftChild;
}
// 替補節(jié)點的右孩子節(jié)點不為空
if (successor != delNode.rightChild) {
successorParent.leftChild = successor.rightChild;
successor.rightChild = delNode.rightChild;
}
return successor;
}
}
public class TreeApp {
public static void main(String[] args) {
Tree tree = new Tree();
tree.insert(8);
tree.insert(50);
tree.insert(45);
tree.insert(21);
tree.insert(32);
tree.insert(18);
tree.insert(37);
tree.insert(64);
tree.insert(88);
tree.insert(5);
tree.insert(4);
tree.insert(7);
System.out.print("PreOrder : ");
tree.traverse(1);
System.out.println();
System.out.print("InOrder : ");
tree.traverse(2);
System.out.println();
System.out.print("PostOrder : ");
tree.traverse(3);
System.out.println();
System.out.println(tree.delete(7));
System.out.print("PreOrder : ");
tree.traverse(1);
System.out.println();
System.out.print("InOrder : ");
tree.traverse(2);
System.out.println();
System.out.print("PostOrder : ");
tree.traverse(3);
System.out.println();
}
}
"AVL樹插入算法的基本步驟如下:
①在尋找新結(jié)點的插入位置的過程中,記下離該位置近來、且平衡因子不等于零的結(jié)點a(此結(jié)點即為可能出現(xiàn)的最小失衡子樹的根);
②修改自該結(jié)點至插入位置路徑上全部結(jié)點的平衡因子(注意:樹上其它結(jié)點的平衡因子均不受插入的影響);
③判別實施插入操作之后,結(jié)點a的平衡因子的絕對值是不是大于1(即判別是不是失衡)。若是,進一步判別失衡類型并做相應(yīng)調(diào)整;否則插入過程結(jié)束。
仍以二叉鏈表作為AVL樹的存儲結(jié)構(gòu)。但每一個結(jié)點需增加1個域用于存儲平衡因
子。類型定義如下:
type
avlpt=^anode;
anode=record
key:keytype;
bf:-1..1;
lchild,rchild:avlpt;
...
end;
在此存儲結(jié)構(gòu)上,AVL樹的插入算法如下:
procedure
insert_avltree(K:keytype;var
t:avlpt);
//在以T為根指針的AVL樹上插入鍵值等于K的新結(jié)點//
begin
new(s);s^.key:=K;s^.lchild:=nil;s^.lchild:=nil;//生成以K為鍵值的新結(jié)點//
if
t=nil
then
t:=s
//將新結(jié)點作為根結(jié)點插入空樹//
else
begin
//4-10行:查找S^的插入位置,并記錄a//
f:=nil;a:=t;p:=t;q:=nil;
while
pnil
do
[
if
p^.bf0
then
[a:=p;f:=p];
//a記錄bf0的結(jié)點,其終值指向離插入位置近來的bf0的結(jié)點//
q:=p;
//s^將插到q^上//
if
s^.keyp^.key
then
p:=p^.lchild
else
p:=p^.rchild
];
if
s^.keyq^.key
then
q^.lchild:=s
else
q^.rchild:=s;
//插入s^//
if
s^.keya^.key
then
[
p:=a^.lchild;b:=p;
d:=1
]
//s^插在a^的左子樹上,增量D為1//
else
[
p:=a^.rchild;b:=p;d:=-1
];//s^插在A^的右子樹上,增量D為-1//
while
ps
do
//修改自a^的孩子至S^路徑上各結(jié)點的平衡因子//
if
s^.keyp^.key
//若S^在p^的左子樹上//
then
[
p^.bf:=1;p:=p^.lchild
]
//p^的平衡因子加工1—原來為O,由于p^是a^的子孫//
else
[p^.bf:=-1;p:=p^.lchild];
//p^的平衡因子減1—原來為0//
case
//判別是不是失衡//
a^.bf=0:
a^.bf:=d;
//找插入位置過程中未遇到bf0的結(jié)點,A指根樹//
a^.bf+d=0:
a^.bf:=0
//插入不導(dǎo)致以a^為根的子樹失衡//
else
//其它情形均失衡。差別失衡類型并調(diào)整//
[
if
d=1
then
case
b^.bf=1:LL-rotation;//LL型調(diào)整//
b^.bf=-1:LR-rotation//LR型調(diào)整,結(jié)束時令B指新子樹的根//
end;
else
case
b^.bf=-1:RR-rotation;
b^.bf=1:RL-rotation
//結(jié)束時令b指新子樹的根//
end;
case
//將新子樹鏈接到原a^的雙親f^上//
f=nil:t:=b;//原a^為樹根//
f^.lchild=a:f^.lchild:=b;
f^.rchild=a:f^.rchild:=b
end
]
end
end;
二叉排序樹(包括AVL樹)適合于組織較小的、內(nèi)存中能容納的查找表。若查找表大得必須存放在外部存儲器上,再用二叉排序樹來表示就不合適了。對外存文件的組織來說,需考慮采用其他的數(shù)據(jù)結(jié)構(gòu)(如B樹和B+樹)。"
通用有序平衡二叉樹接口描述
這套代碼對用戶屏蔽了復(fù)雜的二叉樹的旋轉(zhuǎn)操作,不區(qū)分用戶的數(shù)據(jù)類型,任何數(shù)
據(jù)都可以用有序平衡二叉樹來存放。我還對平衡二叉樹進行了一點點擴展,在樹結(jié)構(gòu)里
面增加了保持線行遞增(或遞減)順序的雙向鏈表,方便使用者能夠快速按序遍歷所有
樹節(jié)點。
這套代碼需要用戶直接參與的部分都用注冊函數(shù)來實現(xiàn),讓使用者完全不需要了解
有序平衡二叉樹的添加、刪除或查找的過程,能夠做到傻瓜式的使用。至于性能,我添
加過300萬個樹節(jié)點之后,樹高只有22層,查找任意一個節(jié)點最多只需要22次匹配操作。
比HASH表快了很多。
這套代碼還針對vxworks操作系統(tǒng)做了一點點擴展,其實就是判斷一下當前操作系統(tǒng)
是否是vxworks,如果是的話就創(chuàng)建一個二進制信號量,如果不是就什么信號量也不創(chuàng)建。
目前此版本提供了如下通用接口:
1、數(shù)據(jù)結(jié)構(gòu)定義
1.1、樹的結(jié)構(gòu)定義
typedef struct _AVL_TREE_HEADER
{
TREE_NODE *pTreeHeader;
#ifdef ORDER_LIST_WANTED
TREE_NODE *pListHeader;
TREE_NODE *pListTail;
#endif
unsigned int count; /*AVL樹里的節(jié)點總數(shù)*/
int (*keyCompare)(TREE_NODE * , TREE_NODE *);
int (*free)(TREE_NODE *);
#if OS==3||OS==4 /*#if OS == VXWORKS || OS == VXWORKS_M*/
SEM_ID sem;
#endif
} tAVLTree;
1.2、樹節(jié)點的結(jié)構(gòu)定義
typedef struct _AVL_TREE_NODE
{
#ifdef ORDER_LIST_WANTED
struct _AVL_TREE_NODE *prev;
struct _AVL_TREE_NODE *next;
#endif
struct _AVL_TREE_NODE *tree_root;
struct _AVL_TREE_NODE *left_child;
struct _AVL_TREE_NODE *right_child;
int bf; /*平衡因子;當平衡因子的絕對值大于或等于2的時候就表示樹不平衡(balance_factor)*/
}TREE_NODE;
2、通用函數(shù)接口定義
2.1、avlTreeCreate
函數(shù)原型:tAVLTree *avlTreeCreate(int *keyCompareFunc,int *freeFunc)
參數(shù)描述:keyCompareFunc - 節(jié)點大小比較函數(shù)的指針,此函數(shù)需要用戶自己提供,
比較函數(shù)的返回值應(yīng)該是-1、0、1,(*keyCompareFunc)函數(shù)有兩個參數(shù),
分別是兩個樹節(jié)點,如果第二個參數(shù)所指向的樹節(jié)點的值比第一個的小,
那么比較函數(shù)就應(yīng)該返回-1,如果相等就是返回0,否則就是1。具體的比
較規(guī)則由用戶根據(jù)所存儲的數(shù)據(jù)里面的關(guān)鍵字來指定(當然,關(guān)鍵字有可
能有多個)。
freeFunc - (*freeFunc)只有一個參數(shù),就是需要釋放內(nèi)存的節(jié)點的指
針,填寫這個注冊函數(shù)的目的是為了實現(xiàn)avlTreeDestroy和avlTreeFlush
這兩個函數(shù)。
返回值 :成功 - 返回指向一個樹的指針
失敗 - NULL
函數(shù)描述:創(chuàng)建一棵空的平衡二叉樹,如果是vxworks操作系統(tǒng)的話還創(chuàng)建一個跟樹
相關(guān)的一個二進制信號量。初始化所有指針為空指針。
2.2、avlTreeDestroy
函數(shù)原型:int avlTreeDestroy(tAVLTree *pTree)
參數(shù)描述:pTree - 指向一棵平衡二叉樹的指針
返回值 :成功 - 1
失敗 - 0
函數(shù)描述:摧毀一顆平衡二叉樹,釋放所有樹節(jié)點的內(nèi)存,并且釋放信號量(如果是
vxworks操作系統(tǒng)的話),釋放pTree所指向的二叉樹所占用的內(nèi)存。
2.3、avlTreeFlush
函數(shù)原型:int avlTreeFlush(tAVLTree *pTree)
參數(shù)描述:pTree - 指向一棵平衡二叉樹的指針
返回值 :成功 - 1
失敗 - 0
函數(shù)描述:清空一顆平衡二叉樹,釋放所有樹節(jié)點的內(nèi)存,但是并不刪除平衡二叉樹
2.4、avlTreeAdd
函數(shù)原型:int avlTreeAdd(tAVLTree *pTree , TREE_NODE *pInsertNode)
參數(shù)描述:pTree - 指向一棵平衡二叉樹的指針
pInsertNode - 待插入的節(jié)點的指針
返回值 :成功 - 1
失敗 - 0
函數(shù)描述:往平衡二叉樹中添加一個成員節(jié)點
2.5、avlTreeDel
函數(shù)原型:int avlTreeAdd(tAVLTree *pTree , TREE_NODE *pDelNode)
參數(shù)描述:pTree - 指向一棵平衡二叉樹的指針
pDelNode - 待插入的節(jié)點的指針
返回值 :成功 - 1
失敗 - 0
函數(shù)描述:從平衡二叉樹中刪除一個樹節(jié)點
2.6、avlTreeFind
函數(shù)原型:TREE_NODE *avlTreeFind(tAVLTree *pTree,TREE_NODE *pKeyNode)
參數(shù)描述:pTree - 指向一棵平衡二叉樹的指針
pKeyNode - 待查找的節(jié)點的關(guān)鍵字
返回值 :成功 - 查找到的節(jié)點指針
失敗 - NULL
函數(shù)描述:查找一個節(jié)點
2.7、avlTreeCount
函數(shù)原型:int avlTreeCount(tAVLTree *pTree)
參數(shù)描述:pTree - 指向一棵平衡二叉樹的指針
返回值 :成功 - 當前平衡二叉樹里的節(jié)點總數(shù)
失敗 - 0
函數(shù)描述:獲取當前樹里面的所有成員節(jié)點總數(shù)
2.8、avlTreeFirst
函數(shù)原型:TREE_NODE *avlTreeFirst(tAVLTree *pTree)
參數(shù)描述:pTree - 指向一棵平衡二叉樹的指針
返回值 :成功 - 當前平衡二叉樹里面的最小的成員節(jié)點的指針
失敗 - NULL,只有樹是空的時候才會返回NULL
函數(shù)描述:獲取當前平衡二叉樹里面第一個成員節(jié)點,即最小的成員節(jié)點
2.9、avlTreeLast
函數(shù)原型:TREE_NODE *avlTreeLast(tAVLTree *pTree)
參數(shù)描述:pTree - 指向一棵平衡二叉樹的指針
返回值 :成功 - 當前平衡二叉樹里面的最大的成員節(jié)點的指針
失敗 - NULL,只有樹是空的時候才會返回NULL
函數(shù)描述:獲取當前平衡二叉樹里面最后一個成員節(jié)點,即最大的成員節(jié)點
2.10、avlTreeNext
函數(shù)原型:TREE_NODE *avlTreeNext(TREE_NODE *pNode)
參數(shù)描述:pTree - 指向一棵平衡二叉樹的指針
返回值 :成功 - 下一個成員節(jié)點的指針
失敗 - NULL
函數(shù)描述:獲取當前節(jié)點的下一個節(jié)點
2.11、avlTreePrev
函數(shù)原型:TREE_NODE *avlTreePrev(TREE_NODE *pNode)
參數(shù)描述:pTree - 指向一棵平衡二叉樹的指針
返回值 :成功 - 前一個成員節(jié)點的指針
失敗 - NULL
函數(shù)描述:獲取當前節(jié)點的前一個節(jié)點
2.12、AVL_TREE_LOCK
函數(shù)原型:void AVL_TREE_LOCK(tAVLTree *pTree,int timeout)
參數(shù)描述:pTree - 指向一棵平衡二叉樹的指針
timeout - 等待時間
返回值 :N/A
函數(shù)描述:此函數(shù)只有是vxworks系統(tǒng)才有效,目的是對樹進行互斥操作,防止
多任務(wù)同時操作鏈表。
2.13、AVL_TREE_UNLOCK
函數(shù)原型:void AVL_TREE_UNLOCK(tAVLTree *pTree)
參數(shù)描述:pTree - 指向一棵平衡二叉樹的指針
返回值 :N/A
函數(shù)描述:此函數(shù)只有是vxworks系統(tǒng)才有效,目的是對樹進行解除互斥操作
2.13、AVL_TREENODE_FREE
函數(shù)原型:void AVL_TREENODE_FREE(tAVLTree *pTree,TREE_NODE *pNode)
參數(shù)描述:pTree - 指向一棵平衡二叉樹的指針
pNode - 需要釋放的節(jié)點的指針
返回值 :N/A
函數(shù)描述:此函數(shù)釋放內(nèi)存的過程采用的是注冊的釋放函數(shù),釋放不僅僅
只有free函數(shù),對于一些復(fù)雜的結(jié)構(gòu)設(shè)計,可能需要釋放多個
不同的內(nèi)存。
3、應(yīng)用舉例
typedef struct _testStruct{
TREE_NODE node; /*樹節(jié)點的結(jié)構(gòu)一定要放在用戶自定義結(jié)構(gòu)的最前面,注意!*/
int keyA; /*關(guān)鍵字A*/
int keyB; /*關(guān)鍵字B*/
int keyC; /*關(guān)鍵字C,比方說此結(jié)構(gòu)有3個關(guān)鍵字*/
int userData[200]; /*用戶的實際數(shù)據(jù)區(qū)*/
}tTestStruct;
int keyCompareFunc(TREE_NODE *p , TREE_NODE *p1)
{
tTestStruct *T1=NULL,*T2=NULL;
T1=(tTestStruct *)p;
T2=(tTestStruct *)p1;
if(T1-keyA T2-keyA) return 1;
if(T1-keyA T2-keyA) return -1;
if(T1-keyB T2-keyB) return 1;
if(T1-keyB T2-keyB) return -1;
if(T1-keyC T2-keyC) return 1;
if(T1-keyC T2-keyC) return -1;
return 0;
}
int freeFunc(TREE_NODE *pNode)
{
free((void *)pNode);
return 1;
}
tAVLTree *pTree = NULL;
int main()
{
tTestStruct *pTest = NULL;
tTestStruct key;
int count = 0;
pTree = (tAVLTree *)avlTreeCreate
(
(void*)keyCompareFunc ,
(void *)freeFunc
);
if(!pTree)
{
printf("\r\n 創(chuàng)建平衡二叉樹失敗");
return 0;
}
/*添加一個節(jié)點*/
pTest = (tTestStruct *)malloc(sizeof(tTestStruct));
if(!pTest)
{
printf("\r\n 創(chuàng)建樹節(jié)點失敗");
return 0;
}
pTest-keyA = 1;
pTest-keyB = 2;
pTest-keyC = 3;
if(!avlTreeAdd(pTree , (TREE_NODE *)pTest))
{
printf("\r\n 已經(jīng)存在相同節(jié)點,添加失敗!關(guān)鍵字完全匹配就表示節(jié)點完全相同");
return 1;
}
/*再添加一個節(jié)點*/
pTest = (tTestStruct *)malloc(sizeof(tTestStruct));
if(!pTest)
{
printf("\r\n 創(chuàng)建樹節(jié)點又失敗");
return 0;
}
pTest-keyA = 1;
pTest-keyB = 1;
pTest-keyC = 3; /*第二次添加的節(jié)點的關(guān)鍵字比較大家可以算一算*/
if(!avlTreeAdd(pTree , (TREE_NODE *)pTest))
{
printf("\r\n 已經(jīng)存在相同節(jié)點,添加失敗!關(guān)鍵字完全匹配就表示節(jié)點完全相同");
return 1;
}
/*遍歷有序平衡二叉樹 -- 從小到大*/
pTest = (tTestStruct *)avlTreeFirst(pTree);
while(pTest)
{
/**************************
*這里你想干嘛干嘛
*處理pTest-userData?
***************************/
pTest = (tTestStruct *)avlTreeNext(pTree);
}
/*遍歷有序平衡二叉樹 -- 從大到小*/
pTest = (tTestStruct *)avlTreeLast(pTree);
while(pTest)
{
/**************************
*這里你想干嘛干嘛
*處理pTest-userData?
***************************/
pTest = (tTestStruct *)avlTreePrev(pTree);
}
/*查找某個節(jié)點*/
key-keyA = 1;
key-keyB = 1;
key-keyC = 3;
pTest = (tTestStruct *)avlTreeFind(pTree , (TREE_NODE *)key);
if(pTest)
printf("\r\n 這里應(yīng)該可以查找到一條記錄,就是第二個插入的節(jié)點");
/*刪除一個節(jié)點,我們就將上面查找到的節(jié)點刪除*/
if(!avlTreeCount(pTree , (TREE_NODE *)pTest))
{
printf("\r\n 如果刪除失敗,只能說明一個問題,樹里面不存在這個節(jié)點");
return 0;
}
/*獲取樹的總的節(jié)點數(shù)*/
count = avlTreeCount(pTree);
printf("\r\n 我想現(xiàn)在count應(yīng)該等于1,剛才我們刪掉了一個節(jié)點");
/*清空整棵樹*/
avlTreeFlush(pTree);
/*刪除整棵樹,其實現(xiàn)在只有一顆裸樹了,因為樹節(jié)點都被flush掉了*/
avlTreeDestroy(pTree);
pTree = NULL;
return 1
}