//
拷贝树
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;
}
}
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;
}
}