#pragma once
template
<
typename t>
class
bst;
template
<
typename t>
class
bstnode
bstnode
(t value)
private
: bstnode
* lchild,
* rchild,
* parent;
t data;};
template
<
typename t>
class
bst//插入操作
void
insert
(bstnode
* node)
;//二叉查詢樹的中序遍歷,就相當於排序了
void
insort
(bstnode
* node)
;//按節點刪除
void
deletenode
(bstnode
* node)
;//按數值刪除
void
deletenode
(const t& t)
; bstnode
*search
(t key)
; bstnode
* root =
nullptr
;private
:int count;};
template
<
typename t>
void bst
::insert
(bstnode
* node)
else
} node-
>parent = temp;
//temp **當前最後遍歷的node,設定node->parent為該節點
if(temp ==
nullptr
)else
else}}
template
<
typename t>
void bst
::insort
(bstnode
* node)
}template
<
typename t>
inline
void bst
::deletenode
(bstnode
* node)
else
delete node;
count--;}
else
if(node-
>rchild !=
nullptr
&& node-
>lchild ==
nullptr
)else
else
delete node;
count--;}
}else
if(node-
>lchild !=
nullptr
&& node-
>rchild ==
nullptr
)//存在左孩子
else
else
delete node;
count--;}
}else
if(curp-
>rchild !=
nullptr
)else
}else
else
//curp->parent->lchild = nullptr;
}//替curp 替換 node
curp-
>parent = p;
curp-
>lchild = node-
>lchild;
curp-
>rchild = node-
>rchild;
if(p-
>lchild == node)
//判斷node 是p 的左孩子還是右孩
else
delete node;
count--;}
}template
<
typename t>
inline
void bst
::deletenode
(const t& k)
}template
<
typename t>
inline bstnode
* bst
::search
(t k)
else
if(k > node-
>data)
else
}return node;
}
#include
"bst.h"
////#include "pch.h"
#include
#include
"bst.h"
using
namespace std;
intmain()
二叉搜尋樹 二叉搜尋樹
題目 二叉搜尋樹 time limit 2000 1000 ms j a others memory limit 32768 32768 k j a others total submission s 6945 accepted submission s 3077 problem descripti...
二叉搜尋樹c 二叉搜尋樹的遍歷
可以總結出三條性質 1 非空左子樹的所有鍵值小於根節點的鍵值。2 非空右子樹的所有鍵值大於根節點的鍵值。3 左右子樹都是二叉搜尋樹。他的遍歷有三種形式 先序遍歷 中序遍歷 後序遍歷。1 先序遍歷 根節點 左子樹 右子樹 首先訪問根節點,然後遍歷左子樹,最後右子樹。並且自遍歷左右子樹時,仍然先訪問根節...
C 二叉搜尋樹
二叉搜尋樹.include using namespace std template type class bstnode templatetype class bsttree return in bsttree vef 1 root null bsttree const bsttree bst b...