转自: http://blog.youkuaiyun.com/cnnumen/article/details/5727328
#include <cstdlib>
#include <iostream>
using namespace std;
typedef struct _NODE
{
int value;
struct _NODE *left;
struct _NODE *right;
_NODE(int value) : value(value), left(NULL), right(NULL) {};
}NODE, *PTRNODE;
void insert(PTRNODE &root, int value)
{
if(root == NULL)
root = new NODE(value);
else
{
if(value < root->value)
insert(root->left, value);
else if(value > root->value)
insert(root->right, value);
else
cout << "duplicated value" << endl;
}
}
void clear(PTRNODE &root)
{
if(root != NULL)
{
clear(root->left);
clear(root->right);
delete root;
root = NULL;
}
}
void _search(PTRNODE root, int searchVal)
{
if(root == NULL)
{
cout << "not find... " << endl;
return;
}
if(searchVal < root->value)
_search(root->left, searchVal);
else if(searchVal > root->value)
_search(root->right, searchVal);
else
cout << "find... " << endl;
}
int main(int argc, char *argv[])
{
PTRNODE root = NULL;
cout << "init is: " << endl;
for(int i=0; i<10; i++)
{
int value = rand() % 100;
cout << value << " ";
insert(root, value);
}
cout << endl;
cout << "pre order result is: " << endl;
preOrder(root);
cout << endl;
cout << "in order result is: " << endl;
inOrder(root);
cout << endl;
cout << "post order result is: " << endl;
postOrder(root);
cout << endl;
cout << "please input a search value: ";
int searchVal;
cin >> searchVal;
_search(root, searchVal);
clear(root);
system("PAUSE");
return EXIT_SUCCESS;
}
计算二叉树节点数量和高度的实现如下:
int getSize(PTRNODE root)
{
if(root == NULL)
return 0;
return 1 + getSize(root->left) + getSize(root->right);
}
int getHeight(PTRNODE root)
{
if(root == NULL)
return -1;
return 1 + max(getHeight(root->left), getHeight(root->right));
}
二叉树的拷贝和比较实现如下:
PTRNODE copy(const PTRNODE root)
{
if(root == NULL)
return NULL;
PTRNODE temp = new NODE(0);
temp->value = root->value;
temp->left = copy(root->left);
temp->right = copy(root->right);
return temp;
}
bool isEqual(const PTRNODE tree1, const PTRNODE tree2)
{
if(tree1 == NULL && tree2 == NULL)
return true;
if(tree1 != NULL && tree2 != NULL && tree1->value == tree2->value
&& isEqual(tree1->left, tree2->left) && isEqual(tree1->right, tree2->right))
return true;
return false;
}