赞
踩
这个是节点的类,自己定义了一个有参构造。二叉树的左右孩子和当前节点的值。
- class Node{
- public:
- Node(int v) : m_value(v), m_right(nullptr), m_left(nullptr) {};
- Node* m_left;
- Node* m_right;
- int m_value;
- };
下面是数的类,包括树的根节点和树的方法的声明
- class Tree
- {
- public:
- Tree() :m_root(nullptr) {}
- void CreateTree(int* arr, int n) {
- CreateTree(arr,n,m_root);
- }
- void CreateTree(int* arr, int n, Node* root) ;
- void InsertBstValue(int v) {}
- void InsertBstValue(Node*& root, int v) ;
- void search(int v) {
- search(m_root,v);
- }
- Node* search(Node*& root, int v) ;
- void del(int v) {
- del(m_root,v);
- }
- void del(Node*& root, int v) ;
- Node* Getmin2() {
- getmin2(m_root);
- }
- Node* getmin2(Node* root) ;
- void Getmin() {
- getmin(m_root);
- }
- Node* getmin(Node* root) ;
- Node* Getmax(){
- getmax(m_root);
- }
- Node* getmax(){};
- void postOrder() {
- posrOrder(m_root);
- }
- void postOrder(Node* m_root) ;
- private:
- Node* m_root;
- };
- void Tree::CreateTree(int *arr,int n,Node* root){
- for(int i=0;i<n;i++){
- InsertBstValue(arr[i]);
- }
- }
这个函数会接受数组和数组大小,然后通过多传入的根节点来初始化一棵树。每次插入一个数组元素。
- void Tree::InsertBstValue(Node* &root,int v){
- if(root== nullptr){
- root=new Node(v);
- }else {
- if (v < root->m_value) {
- InsertBstValue(root->m_left, v);
- } else {
- InsertBstValue(root->m_right, v);
- }
- }
- }
当我们需要插入的时候,我们需要判断当前元素应该所处的位置。到达位置之后,新建节点后插入。
- Node* Tree::search(Node*& root,int v){
- if(root!= nullptr){
- if(root->m_value<v){
- search(root->m_right,v);
- }else if(root->m_value>v){
- search(root->m_left,v);
- }else{
- return root;
- }
- }
- return nullptr;
- }
因为我们是二叉排序树,我们可以通过类似二分查找的方式,每次遍历当前根节点所在的做或者右子树。找不到的话,返回空。
- void Tree::del(int v){
- Node* temp = search(m_root,v);
- if(temp== nullptr) {
- printf("error");
- return;
- }
- del(temp,v);
- }
- void Tree::del(Node* &root,int v){
- if(root!= nullptr){
- if(root->m_left!= nullptr&&root->m_right!= nullptr){
- Node* temp=root->m_right;
- while(temp->m_left){
- temp=temp->m_left;
- }
- m_root->m_value=temp->m_value;
- del(temp,0);
- }else{
- Node* temp=root;
- if(root->m_left== nullptr){
- root=root->m_right;
- }else{
- root=root->m_left;
- }
- }
- }
- }
- void Tree::postOrder(){
- postOrder(m_root);
- }
- void Tree::postOrder(Node* m_root){
- if(m_root!= nullptr) {
- postOrder(m_root->m_left);
- cout << m_root->m_value<<" ";
- postOrder(m_root->m_right);
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。