《算法六》(有序二叉树)
有序二叉树:
二叉树:每个节点有且只有2个孩子
有序二叉树:左孩子<根<右孩子(升序二叉树)
左孩子>根>右孩子(降序二叉树)
叶子节点:没有孩子的节点
有序二叉树节点定义:(数据+左孩子+右孩子)
template<class T>
class Tree{
struct Node{
T data;//数据
Node* left;//左孩子
Node* right;//右孩子
};
Node* pRoot;//根节点
public:
//构造器
Tree(){
pRoot = NULL;//默认根节点为NULL
}
//析构器
~Tree(){
// if(pRoot)
// _clear();
// pRoot = NULL;
}
//添加节点
void insert(const T& data);//插入数据data
void printT();//遍历打印整棵树
void _insert(Node** pRoot, const T& data);//往pRoot里插入数据data
// _clear(){
//
// }
Node* createNode(const T& data){//创造一个Node节点
Node* pNew = new Node;
pNew->data = data;
pNew->left = pNew->right = NULL;
return pNew;
}
void _printTree(Node* pRoot);//遍历打印整棵树
};
完整代码实现:
#include<iostream>
#include<vector>
#include<string.h>
template<class T>
class Tree{
struct Node{
T data;//数据
Node* left;//左孩子
Node* right;//右孩子
};
Node* pRoot;//根节点
public:
//构造器
Tree(){
pRoot = NULL;//默认根节点为NULL
}
//析构器
~Tree(){
// if(pRoot)
// _clear();
// pRoot = NULL;
}
//添加节点
void insert(const T& data);//插入数据data
void printT();//遍历打印整棵树
void _insert(Node** pRoot, const T& data);//往pRoot里插入数据data
// _clear(){
//
// }
Node* createNode(const T& data){//创造一个Node节点
Node* pNew = new Node;
pNew->data = data;
pNew->left = pNew->right = NULL;
return pNew;
}
void _printTree(Node* pRoot);//遍历打印整棵树
};
template<class T>
//遍历打印整棵树
void Tree<T>::_printTree(Node* pRoot){
//Node* pTemp = *pRoot;
if(pRoot != NULL){
printf("%d ", pRoot->data);
}
if(pRoot == NULL){
_printTree(pRoot->left);
_printTree(pRoot->right);
}
printf("\n");
}
template<class T>
void Tree<T>::_insert(Node** pRoot, const T& data){
Node* pNew = createNode(data);
//新节点成为根节点
if( (*pRoot) == NULL ){
*pRoot = pNew;
return;
}
//新节点成为左节点
if((*pRoot)->data > data){
_insert(&((*pRoot)->left), data);
}
//新节点成为右节点
if((*pRoot)->data < data){
_insert(&((*pRoot)->right), data);
}
/*
Node* pTemp = (*pRoot);
while(pTemp){
if(pTemp->left){
if()
}else if(pTemp->right){
}else{
if(pTemp->data > data)
pTemp->left = pNew;
if(pTemp->data < data)
pTemp->right = pNew;
}
if(pTemp->data == data)
return;
}
*/
/*
if(this->pRoot){//this->pRoot不为NULL,说明要插入的不是根节点
while(this->pRoot->left){
}
}else{//this->pRoot为NULL,插入根节点
this->pRoot = pNew;
}
*/
}
template<class T>
void Tree<T>::insert(const T& data){
_insert(&pRoot, data);//往pRoot里插入数据data
}
template<class T>
void Tree<T>::printT(){
_printTree(pRoot);
}
int main(){
Tree<int> t;
t.insert(2);
t.insert(0);
t.insert(3);
t.insert(4);
t.printT();
return 0;
}
有点问题:
创建应该没有问题,打印的时候只打印了根节点就结束了,没找到问题所在。

浙公网安备 33010602011771号