二叉树

#include "stdafx.h"
#include<iostream>
using namespace std;

class Node
{
public:
 int data;
 Node *parent;
 Node *left;
 Node *right;

public:
 Node():data(-1), parent(NULL), left(NULL), right(NULL){};
 Node(int num):data(num), parent(NULL), left(NULL), right(NULL){};
};

class BinarySortTree
{
public:
 BinarySortTree(int num[], int len)
 {
  root = new Node(num[0]);

  for(int i = 0; i < len; i++)
  {
   insertNode(num[i]);
  }
 }

 void insertNode(int data)
 {
  if(root != NULL)
  {
   insertNode(root, data);
  }
 }

 Node *searchNode(int data)
 {
  if(root != NULL)
  {
   return searchNode(root, data);
  }

  return NULL;
 }

 void deleteNode(int data)
 {
  Node *current = NULL;
  current = searchNode(data);

  if(current != NULL)
  {
   deleteNode(current);
  }
 }

 void inOrderTraversal()
 {
  if(root == NULL)
  {
   return;
  }
  else
  {
   inOrderTraversal(root);
  }
 }

 void preOrderTraversal()
 {
  if(root == NULL)
  {
   return;
  }
  else
  {
   preOrderTraversal(root);
  }
 }

 void postOrderTraversal()
 {
  if(root == NULL)
  {
   return;
  }
  else
  {
   postOrderTraversal(root);
  }
 }

private:
 void insertNode(Node *current, int data)
 {
  if( data < current->data)
  {
   if(current->left == NULL)
   {
    current->left = new Node(data);
    current->left->parent = current;
   }
   else
   {
    insertNode(current->left, data);
   }
  }
  else if( data > current->data)
  {
   if(current->right == NULL)
   {
    current->right = new Node(data);
    current->right->parent = current;
   }
   else
   {
    insertNode(current->right, data);
   }
  }

  return;
 }

 Node *searchNode(Node *current, int data)
 {
  if(data < current->data)
  {
   if(current->left == NULL)
   {
    return NULL;
   }

   return searchNode( current->left, data);
  }
  else if( data > current->data)
  {
   if(current->right == NULL)
   {
    return NULL;
   }

   return searchNode(current->right, data);
  }

  return current;
 }
 void deleteNode(Node *current)
 {
  if(current->left != NULL)
  {
   deleteNode(current->left);
  }
  if(current->right != NULL)
  {
   deleteNode(current->right);
  }
  if(current->parent == NULL)
  {
   delete current;
   root = NULL;
   return;
  }

  if(current->parent->data > current->data)
  {
   current->parent->left = NULL;
  }
  else
  {
   current->parent->right = NULL;
  }

  delete current;
 }

 void inOrderTraversal(Node *current)
 {
  if(current != NULL)
  {
   inOrderTraversal(current->left);
   cout<<current->data<<" ";
   inOrderTraversal(current->right);
  }
 }

 void preOrderTraversal(Node *current)
 {
  if(current != NULL)
  {
   cout<<current->data<<" ";
   preOrderTraversal(current->left);
   preOrderTraversal(current->right);
  }
 }
 
 void postOrderTraversal(Node *current)
 {
  if(current != NULL)
  {
   postOrderTraversal(current->left);
   postOrderTraversal(current->right);
   cout<<current->data<<" ";
  }
 }

private:
 Node *root;
};

int _tmain(int argc, _TCHAR* argv[])
{
 int num[] = {5, 3, 11, 7, 2, 4, 6, 8, 1};
 BinarySortTree tree(num, 9);

 cout<<"InOrder"<<endl;
 tree.inOrderTraversal();
 cout<<endl<<"preOrder"<<endl;
 tree.preOrderTraversal();
 cout<<endl<<"postOrder"<<endl;
 tree.postOrderTraversal();

 cout<<endl<<"Please input the number you want to search: ";
 int n = -1;
 cin>>n;
 getchar( );
 Node *newNode = tree.searchNode(n);

 if(newNode == NULL)
 {
  cout<<"the number you want to search is NULL!"<<endl;
 }

 if(newNode->left != NULL)
  cout<<"The left child is: "<<newNode->left->data<<"  ";
 else
  cout<<"The left child is:  NULL  ";

 if(newNode->right != NULL)
  cout<<"The right child is: "<<newNode->right->data<<endl;
 else
  cout<<"The right child is:  NULL  ";
 getchar( );
 return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值