二叉搜索树具有下列性质: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。
 在二叉搜索树的基础上,如果进行一次中序遍历,则会正好会把节点的权值从小到大搜一遍。
using namespace std;
struct Node{//节点 
  int data;
  Node *left;
  Node *right;
};
struct Tree{//树 
  Node *root;
};
//先序遍历(dfs遍历)
void preorder(Node *node)
{
  if (node!=NULL){
    cout<<node->data<<endl;
    preorder(node->left);
    preorder(node->right);
  }
}
//中序遍历-->正好是从小到大排序 
void inorder(Node *node)
{
  if (node!=NULL){
    inorder(node->left);
    cout<<node->data<<endl;
    inorder(node->right);
  }
} 
//后序遍历
void postorder(Node *node)
{
  if (node!=NULL){
    postorder(node->left);
    postorder(node->right);
    cout<<node->data<<endl;
  }
}
//插入节点
void insert_node(Tree *tree, int value)
{
  Node *node=(Node *)malloc(sizeof(Node));
  node->data=value;
  node->left=NULL;
  node->right=NULL; 
  
  if (tree->root==NULL){
    tree->root=node;
  }else{
    Node *tmp=tree->root;
    while (tmp!=NULL){
      if (value<tmp->data){
        if (tmp->left==NULL){
          tmp->left=node;
          return;
        }else{
          tmp=tmp->left;
        }
      }else{
        if (tmp->right==NULL){
          tmp->right=node;
          return;
        }else{
          tmp=tmp->right;
        }
      }
    }
  }
} 
//求树的高度
int get_height(Node *node)
{
  if (node==NULL){
    return 0;
  }else{
    int left_h=get_height(node->left);
    int right_h=get_height(node->right);
    int max_height=max(left_h, right_h);
    return max_height+1;
  }
}
//最大值
int get_max(Node *node)
{
  if (node==NULL)
    return -1;
  else{
    int max_left=get_max(node->left);
    int max_right=get_max(node->right);
    int max_this=node->data;
    int maxx=max_left;
    if (max_right>maxx) maxx=max_right;
    if (max_this>maxx)  maxx=max_this;
    return maxx;
  }
} 
int main()
{
  int a[10]={6,3,8,2,5,1,7};
  Tree tree;
  tree.root=NULL;
  for (int i=0; i<=6; i++){
    insert_node(&tree, a[i]);
  }
  preorder(tree.root);
  cout<<endl<<endl;
  int height=get_height(tree.root);
  cout<<height<<endl;
  int maxx=get_max(tree.root);
  cout<<maxx<<endl; 
  return 0;
}                
                










