参考资料:《数据结构与算法分析》(第三版英文版)
书本题目:5.15
其实是做作业的时候顺便复习一下二叉查找树,顺便把自己写代码时的过程记录下来。虽然代码可能比较丑,但应该对于新手而言是比较友好的,可以了解如何一步一步实现BST的函数的。同时更深入理解一下返回值为Node*类型的Help函数。
说明:BST为Binary Search Tree,二叉查找树.Node为节点,即二叉查找树的节点。代码加粗部分为每次新增的代码
首先建立Node节点,每个节点只有1个整数类型的public数据成员
#pragma once
#include <iostream>
using namespace std;
class Node
{
public:
int x;
Node* left;
Node* right;
Node(int val, Node* l = NULL, Node* r = NULL) {
x = val;
left = l;
right = r;
}
~Node() {};
};
1。初始化
我们首先要实现构造函数和析构函数。
构造函数其实就是将root指向新new出来的Node对象。
析构函数中借用了一个clearHelp()函数,其参数为任意BST)的将被删除一个根节点rt(因为这样才能实现递归)。使用递归从左子树遍历到右子树,当发现某一节点的左右子树均为空的时候,删除该节点。随后逆流而上,向上删除。
#pragma once
#include "Node.h"
class BST
{
public:
Node* root;
BST(int val) {
root = new Node(val, NULL, NULL);
}
~BST() {
clearHelp(root);
}
void clearHelp(Node* rt) {
if (rt == NULL) return;
clearHelp(rt->left);
clearHelp(rt->right);
delete rt;
}
};
实现插入函数insert();
首先,在Node类里面分别实现设置左节点和右节点的setleft()和setRight()函数
///Node 类
#pragma once
#include <iostream>
using namespace std;
class Node
{
public:
int x;
Node* left;
Node* right;
Node(int val, Node* l = NULL, Node* r = NULL) {
x = val;
left = l;
right = r;
}
~Node() {};
void setLeft(Node* l) {
left = l;
}
void setRight(Node* r) {
right = r;
}
};
随后在BST类里面在InsertHelp(Node* ,int)