#include#include using namespace std;
typedef struct nodenode,*pnode;
void binary_tree_insert(pnode &pn,pnode pz)//二叉樹插入操作
else
} pz->parent=y;
if(y==null)else if(pz->value<=y->value)else
}void build_binary_search_tree(pnode &pn,int n)//建立n個具有父節點的二叉搜尋樹
}//void build_binary_search_tree(pnode &pn,int n)//建立n個具有父節點的二叉搜尋樹
//else
// }elseelse
// }
// }
// }
// }
//}void inorder(pnode pn)//中序遍歷
}void inorder_parent(pnode pn)//中序遍歷,不用堆疊,使用父節點
cout
if(pn->right)
while(pn)
}pn=pn->parent;//若該節點無右節點或者該節點是父節點的右節點,則回溯到父節點
} }}pnode binary_tree_search_recursive(pnode pn,int key)//遞迴查詢
else }
pnode binary_tree_search_iterator(pnode pn,int key)//迭代查詢
else
} return pn;
}pnode binary_tree_minimum(pnode pn)//二叉搜尋樹的最小值
} return pn;
}pnode binary_tree_maximum(pnode pn)//二叉搜尋樹的最大值
} return pn;
}pnode binary_tree_successor(pnode pn)//二叉查詢樹節點的後繼
pnode y=pn->parent;
while(y && y->right==pn)
return y;
}pnode binary_tree_predecessor(pnode pn)//二叉查詢樹節點前驅
pnode y=pn->parent;
while(y && y->left==pn)
return y;
}void inorder_successor(pnode pn)//二叉搜尋樹的中序後繼遍曆法
} coutparent->left==u)else
if(v)
}void binary_tree_delete(pnode &pn,pnode pz)//節點刪除操作
else if(pz->right==null)else//或者後繼節點和待替換節點相同時也包含如下情況
binary_tree_transplant(pn,pz,p);//替換後繼和待刪除節點
二叉搜尋樹的插入和刪除
二叉搜尋樹的插入和刪除。bintree insert elementtype x,bintree bst 二叉搜尋樹的插入演算法 else 開始找要插入元素的位置 if xdata bst left insert x,bst left 遞迴插入左子樹 else if x bst data bst r...
二叉搜尋樹的插入 刪除
二叉搜尋樹 就是每乙個結點的data值,都大於它的所有左孩子的data,小於所有右孩子的data 二叉搜尋樹的插入刪除的模擬 pragma once namespace ljc template class t friend class binarysorttree template class t...
(二叉樹)二叉搜尋樹的查詢 插入和刪除
二叉搜尋樹或者是一棵空樹,或者是具有下列性質的二叉樹 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 它的左 右子樹也分別為二叉搜尋樹。二叉搜尋樹的特點之一即是其中序遍歷為公升序。根據二叉搜尋樹的性質,每個結點的值都是大於其...