二叉搜索树结点的定义
struct BstNode
{
char data;
BstNode * left;
BstNode * right;
BstNode(char data)//此处用到构造函数
{
this->data = data;
this->left = this->right = nullptr;
}
};
在堆中创建一个二叉搜索树结点,堆中数据特点,由程序员手动开辟释放,或者在程序运行结束后由操作系统回收内存
BstNode * GetNewNode(char data)
{
BstNode * NewNode = new BstNode(data);
return NewNode;
}
二叉树结点的插入
BstNode * InsertNode(BstNode * root, char data)
{
if(root == nullptr)
{
root = GetNewNode(data);
}
else if(data <= root->data)
{
root->left = InsertNode(root->left, data);
}
else
{
root->right = InsertNode(root->right, data);
}
return root;
}
二叉搜索树的前序遍历
void Preorder(BstNode * root)
{
if(root == nullptr)
return;
cout << root->data << " ";
Preorder(root->left);
Preorder(root->right);
}
二叉搜索树的中序遍历
void Inorder(BstNode * root)
{
if(root == nullptr)
return;
Inorder(root->left);
cout << root->data << " ";
Inorder(root->right);
}
二叉搜索树的后序遍历
void Postorder(BstNode * root)
{
if(root == nullptr)
return;
Postorder(root->left);
Postorder(root->right);
cout << root->data << " ";
}
测试:
int main()
{
/*Code To Test the logic
Creating an example tree
M
/ \
B Q
/ \ \
A C Z
*/
BstNode * root = NULL;
root = InsertNode(root,'M'); root = InsertNode(root,'B');
root = InsertNode(root,'Q'); root = InsertNode(root,'Z');
root = InsertNode(root,'A'); root = InsertNode(root,'C');
//Print Nodes in Preorder.
cout<<"Preorder: ";
Preorder(root);
cout<<"\n";
//Print Nodes in Inorder
cout<<"Inorder: ";
Inorder(root);
cout<<"\n";
//Print Nodes in Postorder
cout<<"Postorder: ";
Postorder(root);
cout<<"\n";
return 0;
}
The end...