#include<iostream>
#include<stdio.h>
#include<stdlib.h>
#include<string>
#include<string.h>
#include<algorithm>
#include<map>
using namespace std;
///遍历与创建都默认使用先序遍历
/*
供测试输入样例 :
1 2 0 0 0
3 1 0 0 2 0 0
*/
///二叉树
struct Node
{
int data;
Node* left;
Node* right;
};
typedef Node* TreeNode;
void Preorder(TreeNode node);
TreeNode CreateTree();
int TreeDepth(TreeNode node);
int TreeChildNodeCount(TreeNode node);
void CopyTree(TreeNode node,TreeNode& newNode);
///遍历二叉树
void Preorder(TreeNode node)
{
if(node)
{
cout<<node->data<<endl;
Preorder(node->left);
Preorder(node->right);
}
}
///创建一个二叉树
TreeNode CreateTree()
{
TreeNode node;
int a;
cin>>a;
//node=(Node*)malloc(sizeof(Node));
if(a==0)
{
/*node=(Node*)malloc(sizeof(Node));
node->left=NULL;
node->right=NULL;*/
node=NULL;
}
else
{
node=(Node*)malloc(sizeof(Node));
node->data=a;
//cout<<"aaa"<<node->data<<endl;
node->left=CreateTree();
node->right=CreateTree();
}
return node;
}
///求树的深度
int TreeDepth(TreeNode node)
{
if(node==NULL)
{
return 0;
}
else
{
int n=TreeDepth(node->left);
int m=TreeDepth(node->right);
if(n<m) return m+1;
else return n+1;
}
}
///统计树的叶子节点的个数
int TreeChildNodeCount(TreeNode node)
{
if(node==NULL)
return 0;
if(node->left==NULL&&node->right==NULL)
return 1;
if(node)
{
return TreeChildNodeCount(node->left)+TreeChildNodeCount(node->right);
}
}
///复制二叉树
void CopyTree(TreeNode node,TreeNode& newNode)
{
if(node==NULL)
{
newNode=NULL;
return ;
}
else
{
newNode=(Node*)malloc(sizeof(Node));
newNode->data=node->data;
CopyTree(node->left,newNode->left);
CopyTree(node->right,newNode->right);
}
}
int main()
{
TreeNode node;
cout<<"aaaa0";
node= CreateTree();
Preorder(node);
//cout<<".."<<TreeDepth(node)<<endl;
//cout<<".."<<TreeChildNodeCount(node)<<endl;
cout<<"************复制二叉树**************\n";
TreeNode newNode;
CopyTree(node,newNode);
Preorder(newNode);
return 0;
}
只供自己学习使用,有错误请指出