
//拷贝树

void copy_tree(TreeNode *&dst,TreeNode *src)

...{
if( NULL==src)
dst= NULL ;
else

...{
dst=(TreeNode *) malloc(sizeof(TreeNode));
dst->left = dst->right = NULL;
dst->value = src->value;
copy_tree(dst->left,src->left);
copy_tree(dst->right,src->right);
}
}

//判断两棵二叉树是否相等

bool equal_tree(TreeNode *a, TreeNode *b)

...{

if (a == NULL && b == NULL) ...{
return true;
}
if (a != NULL && b != NULL &&(a->value == b->value)&&

equal_tree(a->left, b->left) && equal_tree(a->right, b->right)) ...{
return true;
}

else...{
return false;
}
}

//查找节点

bool find_node(TreeNode *t, int value)

...{
if( t == NULL )
return false;
if( t->value == value )

...{
return true;
}
if( t->value < value )
return find_node(t->left, value);
if(t->value > value)
return find_node(t->right, value);
}

//查找父节点

TreeNode* parent_node(int value, TreeNode *t)

...{


if (t == NULL) ...{
return NULL;
}

if (t->value == value) //根节点
return t;

if (t->left->value == value ||

t->right->value == value) ...{ //非根节点
return t;
}

else if (value < t->value) ...{
return parent_node(value, t->left);
}

else if (value > t->value) ...{
return parent_node(value, t->right);
}
return NULL;
}

//统计节点个数

int count_node(TreeNode *t)

...{

if (t == NULL) ...{
return 0;
}

else...{
return 1+count_node(t->left)+count_node(t->right);
}
}

//统计层数

int level(TreeNode *t)

...{
int l=0, r=0;

if (t == NULL) ...{
return 0;
}

else...{

if (t->left != NULL) ...{
l=1+level(t->left);
}

if (t->right != NULL) ...{
r=1+level(t->right);
}
return l>r?l:r;
}
}

//判断是否为二叉排序树

bool isbst(TreeNode *t)

...{

if ( t == NULL ) ...{
return true;
}


if (isbst(t->left) && isbst(t->right) ) ...{
if ((t->left != NULL && t->right == NULL && t->value > t->left->value) ||
(t->right != NULL && t->left == NULL && t->value <= t->right->value) ||
(t->left != NULL && t->right != NULL && t->value > t->left->value && t->value <= t->right->value) ||

(t->left == NULL && t->right == NULL))...{
return true;
}

else...{
return false;
}
}

else...{
return false;
}
}
