C++二叉树
#include <iostream>
using namespace std;
class TreeNode {
public:
char str;
TreeNode* LeftNode;
TreeNode* RightNode;
};
//遍历输出数节点
void PrintTreeNode(TreeNode*node) {
if (node==NULL)//递归结束条件
{
return;
}
//先序遍历:先根再左再右
/*cout << node->str<<" ";
PrintTreeNode(node->LeftNode);
PrintTreeNode(node->RightNode);*/
//中序遍历:先左后根再右
/*PrintTreeNode(node->LeftNode);
cout << node->str << " ";
PrintTreeNode(node->RightNode);*/
//后序遍历:先左后右再根
PrintTreeNode(node->LeftNode);
PrintTreeNode(node->RightNode);
cout << node->str << " ";
}
//求叶子数
void PrintTreeChildNode(TreeNode*node,int*p) {
if (node == NULL)
{
return;
}
if (node->LeftNode==NULL&&node->RightNode==NULL)
{
++(*p);
cout << node->str << " ";
}
//查找左子树
PrintTreeChildNode(node->LeftNode, p);
//查找右子树
PrintTreeChildNode(node->RightNode, p);
}
//求树的高度
int PrinyTreeLenght(TreeNode*node) {
if (node==NULL)
{
return 0;
}
int number = 0;
int LeftNumber = PrinyTreeLenght(node->LeftNode);
int RightNumber = PrinyTreeLenght(node->RightNode);
number = (LeftNumber > RightNumber) ? LeftNumber + 1 : RightNumber + 1;
return number;
}
//拷贝树
TreeNode*CopyTree(TreeNode*node) {
if (node==NULL)
{
return NULL;
}
TreeNode* tree = new TreeNode;
tree->str = node->str;
tree->LeftNode = CopyTree(node->LeftNode);
tree->RightNode = CopyTree(node->RightNode);
return tree;
}
//释放树
void FreeTree(TreeNode*node) {
if (node == NULL)
{
return;
}
FreeTree(node->LeftNode);
FreeTree(node->RightNode);
delete node;
}
int main(){
TreeNode A = { 'A',NULL,NULL };
TreeNode B = { 'B',NULL,NULL };
TreeNode C = { 'C',NULL,NULL };
TreeNode D = { 'D',NULL,NULL };
TreeNode E = { 'E',NULL,NULL };
TreeNode F = { 'F',NULL,NULL };
TreeNode G = { 'G',NULL,NULL };
TreeNode H = { 'H',NULL,NULL };
TreeNode I = { 'I',NULL,NULL };
TreeNode J = { 'J',NULL,NULL };
A.LeftNode = &B;//创建树节点关系
A.RightNode = &C;
B.LeftNode = &D;
B.RightNode = &E;
D.LeftNode = &H;
D.RightNode = &I;
E.LeftNode = &J;
C.LeftNode = &F;
C.RightNode = &G;
PrintTreeNode(&A);
cout << endl;
int num = 0;
PrintTreeChildNode(&A, &num);
cout << endl;
cout << "叶子节点数目:" << num << endl;
int number = PrinyTreeLenght(&A);
cout << "树的高度:" << number << endl;
TreeNode*newTree = CopyTree(&A);
PrintTreeNode(newTree);
cout << endl;
FreeTree(newTree);
return 0;
}
效果图: