排序二叉樹是二叉樹的一種,但他是有序的,他有些一般二叉樹沒有的操作,比如插入。此外刪除操作比較複雜,建議畫圖理解!
一,建立:
template//二叉樹節點定義
struct binode
;
bisorttree(t a,int n)//將資料放在長度為n 的陣列中用於建立二叉樹
}
二,刪除:
void deletebst(t t)
//刪除節點
void deletebst(binode* root)
else
else
else//如果都不為空
p->data = root->data;//將最左邊節點的資料直接覆蓋要刪除的節點的資料
if (par==root)//處理特殊情況
else
delete root;}}
} }
三,插入函式:
//重要的一點 binode* & root 表示對指標的
//引用。涉及到引用問題,經典的例題就是數值交換 void swap1(int a,int b)
//和 void swap2(int &a ,int &b)。當乙個陣列裡面的兩個數要進行交換時,
//呼叫swap1函式其實是無法真正進行交換的,這個原因應該大家都知道,就不在累述。
void insertbst(binode* & root,binode*&s)
else if (s->data > root->data)//資料比父節點大,放右子樹
else//否則放左子樹
}
2,插入函式非遞迴演算法:
void insertbstt(binode* root,binode* s)//非遞迴,,用佇列和查詢
if(p->datadata&&!p->right)
}//有兩個孩子。則無法插入需入隊
if (p->left)
if (p->right)
}} void searchbst(t t)
else
else
else
}} }
2,非遞迴:
binode* searchbstt(t t)//非遞迴,,用佇列,思路和一般二叉樹的層序遍歷相同
if (p->right)
}}
資料結構 排序二叉樹
排序二叉樹即在構建二叉樹的時候就對二叉樹進行排序了,當中序遍歷二叉樹的時候即可得到乙個有序的數列 排序二叉樹的規則就是 若他的左子樹不空,則左子樹上所有結點的值均小於它的根結構的值 若他的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 它的左 右子樹也分別為二叉排序樹 從二叉排序樹的定義也可...
資料結構 二叉樹 反轉二叉樹
include using namespace std define maxsize 1000 struct binary tree node class queue queue queue void queue push binary tree node btn binary tree node ...
《資料結構》 二叉樹
二叉樹 是 n個結點的有限集,它或為空集,或由乙個根結點及兩棵互不相交的 分別稱為該根的左子樹和右子樹的二叉樹組成。二叉樹不是樹的特殊情況,這是兩種不同的資料結構 它與無序樹和度為 2的有序樹不同。二叉樹的性質 1 二叉樹第 i層上的結點數最多為 2 i 1 2 深度為 k的二叉樹至多有 2 k 1...