二叉查詢樹

2021-09-25 13:53:55 字數 1761 閱讀 4420

前驅節點

有左子樹,前驅節點為左子樹的最右節點;

沒有左子樹,且本身為右子樹,前驅節點為父節點;

沒有左子樹,且本身為左子樹,向父節點查詢,第乙個作為右子樹節點的父節點的父節點;

刪除節點

沒有子樹,直接刪除

只有左子樹或者右子樹,孩子節點代替刪除節點;

同時又左右子樹,前驅節點的值儲存到當前節點,刪除前驅節點;(這時前驅節點一定為第1種情況,一定沒有子樹,可以直接刪除)

#include #include using namespace std;

templateclass node

node(t key):_value(key),lchild(nullptr), rchild(nullptr), parent(nullptr){}

~node() {}

public:

t _value;

node* lchild;

node* rchild;

node* parent;

};templateclass btree ;

templatebtree::btree()

templatebtree::~btree()

templatevoid btree::insert(t key)

else if(key > pnode->_value)

else

} pnode = new node(key);

if (pparent == nullptr)

else

else pparent->rchild = pnode;

} pnode->parent = pparent; }

templatevoid btree::preorder()

templatevoid btree::inorder()

templatevoid btree::postorder()

templatevoid btree::preorder(node* pnode)

}templatevoid btree::inorder(node* pnode)

}templatevoid btree::postorder(node* pnode)

}templatenode* btree::search_iterator(t key)

else if (key > pnode->_value)

else

break;

} return pnode;

}templatenode* btree::predecessor(node* pnode)

return pnode;

} else

return pparent; }}

templatevoid btree::remove(t key)

else

pparent = pdel->parent;

if (pdel->lchild != nullptr)

else

if (pchild != nullptr)

if (pdel->parent == nullptr)

else if (pparent->lchild == pdel)

else if(pdel->parent->rchild == pdel)

if (pdel->_value != key)

delete pdel;

}int main()

二叉樹 二叉查詢樹

構建二叉樹,判斷是否為二叉查詢樹,遞迴先序遍歷,非遞迴中序遍歷 include include include include using namespace std 二叉樹結點 struct treenode 鍊錶結點 struct listnode struct tempnodetempnode...

二叉樹 二叉查詢樹

二叉樹 binary tree 一種樹型結構,每個節點最多擁有兩個節點。如下圖 幾種型別的二叉樹 1.full binary tree 每個節點的孩子數 是 0 或者 2.對高度沒有要求。如下圖 2.perfect binary tree 這個就是最完美的樹,顧名思義,所有葉子節點都有相同的深度,並...

樹(樹,二叉樹,二叉查詢樹)

1.定義 n n 0 個結點構成的有限集合。當n 0時,稱為空樹 2.對於任一棵非空樹 n 0 它具備以下性質 1 樹中有乙個稱為 根 root 的特殊結點,用 r 表示 2 其餘結點可分為m m 0 個互不相交的有限集t1,t2,其中每個集合本身又是一棵樹,稱為原來樹的子樹。3.樹的一些性質 1 ...