平衡二叉樹
首先該樹挺簡單的。
大概解釋個意思:這種樹的最基本的操作是ll和rr兩個單旋轉函式,這兩個函式和鍊錶的插入函式挺相像的。這兩個函式要牢記。
其次是lr和rl兩個雙旋轉函式,要在心裡繪製出這兩種樹的形狀,這樣呼叫ll還是rr很明了了。
1,在進行增刪節點時,和二叉查詢樹演算法一致,不過是多了一步判斷左右子樹高度並對不符合規格限制的樹單旋轉抑或是雙旋轉,並更新高度(這一步很關鍵)。
2,在ll函式和rr函式的最後要附帶更新高度的操作。
3,刪除節點和搜尋樹一致,不過是查詢樹可以找左樹最大抑或是右樹最小刪除,但是平衡樹必須在更高大的子樹刪去(為了更易平衡,否則刪一下就要換一下根節點orz)。增加的節點一定是葉子節點,這個和搜尋樹一樣。
以下**:
#include #include #include using namespace std;
typedef struct binode
binode,*bitree;
int findmax(bitree root)
else
return temp->data; }}
int findmin(bitree root)
else
return temp->data; }}
int getheight(bitree root)
else }
bitree ll(bitree &root)
bitree rr(bitree &root)
bitree lr(bitree &root)
bitree rl(bitree &root)
void insert(bitree &root,int x)
else if(root->datarchild,x);
if(getheight(root->rchild)-getheight(root->lchild)>1)
else
}else
}else if(root->data>x)
else
}else
}}bool delete(bitree &root,int x)
else if(root->data==x)
else
}else if(root->lchild!=null||root->rchild!=null)
else
}else if(root->data>x)
else
}else
}else if(root->datarchild,x);
if(getheight(root->lchild)-getheight(root->rchild)>1)
else
}else
}return true;
}
溜了,打dota去了。 C語言實現二叉樹
1.c語言實現二叉樹中節點間最大距離 includetypedef struct treenode treenode 我們可以將所有的結點的左右子樹的高度和計算一下,然後取出最大值,就是最遠的距離。int getmaxdistance treenode root,int maxdistance in...
二叉樹(C語言實現)
以下為用c語言實現的二叉排序樹,包含了樹的建立,銷毀,新增,刪除,修改,前 中 後 層序遍歷,深度,密度。include include include define type int typedef struct node node 建立結點 node creat node type data 新...
重建二叉樹 C語言實現
主要根據程式設計之美中利用前序與中序遍歷實現二叉樹的重構。其中對於前序遍歷中的每乙個節點都是當前子樹的根節點這一理論來對中序遍歷進行劃分。並且也實現了根據中序遍歷與後序遍歷實現二叉樹的重構,其中對於後序遍歷主要要注意其中後序遍歷的最後乙個元素表示的是根節點這一思想來實現。其中對於利用前序遍歷與中序遍...