二叉搜尋樹的插入和刪除

2021-06-20 12:35:59 字數 1727 閱讀 5961

#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...

(二叉樹)二叉搜尋樹的查詢 插入和刪除

二叉搜尋樹或者是一棵空樹,或者是具有下列性質的二叉樹 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 它的左 右子樹也分別為二叉搜尋樹。二叉搜尋樹的特點之一即是其中序遍歷為公升序。根據二叉搜尋樹的性質,每個結點的值都是大於其...