递归遍历
#include<iostream>
using namespace std;
//二叉树
typedef struct BINARYNODE
{
char ch;
struct BINARYNODE* lchaild; //左子树
struct BINARYNODE* rchaild; //右子树
}BinaryNode;
//递归
void Recursion(BinaryNode* root)
{
if (root == NULL)
{
return;
}
//先访问根节点
cout << root->ch<<" ";
//在遍历左子树
Recursion(root->lchaild);
//在遍历右子树
Recursion(root->rchaild);
//前序遍历:根 左 右
//中序遍历:左 根 右
//后续遍历:左 右 根
}
void CreateBinaryTree()
{
//创建节点
BinaryNode node1 = { 'a',NULL,NULL };
BinaryNode node2 = { 'b',NULL,NULL };
BinaryNode node3 = { 'c',NULL,NULL };
BinaryNode node4 = { 'd',NULL,NULL };
BinaryNode node5 = { 'e',NULL,NULL };
BinaryNode node6 = { 'f',NULL,NULL };
BinaryNode node7 = { 'g',NULL,NULL };
BinaryNode node8 = { 'h',NULL,NULL };
//建立节点关系
node1.lchaild = &node2;
node1.rchaild = &node6;
node2.rchaild = &node3;
node3.lchaild = &node4;
node3.rchaild = &node5;
node6.rchaild = &node7;
node7.lchaild = &node8;
cout << "前序遍历" << endl;
Recursion(&node1);
}
int main()
{
CreateBinaryTree();
return 0;
}
求二叉树叶子节点
//二叉树
typedef struct BINARYNODE
{
char ch;
struct BINARYNODE* lchaild; //左子树
struct BINARYNODE* rchaild; //右子树
}BinaryNode;
void CaculateLeafNum(BinaryNode *root ,int* leafNum )
{
if (root == NULL)
{
return;
}
if (root->lchaild == NULL && root->rchaild == NULL)
{
(*leafNum)++;
}
//左子树叶子节点数目
CaculateLeafNum(root->lchaild, leafNum);
//右子树叶子节点数目
CaculateLeafNum(root->rchaild, leafNum);
}
void CreateBinaryTree()
{
//创建节点
BinaryNode node1 = { 'a',NULL,NULL };
BinaryNode node2 = { 'b',NULL,NULL };
BinaryNode node3 = { 'c',NULL,NULL };
BinaryNode node4 = { 'd',NULL,NULL };
BinaryNode node5 = { 'e',NULL,NULL };
BinaryNode node6 = { 'f',NULL,NULL };
BinaryNode node7 = { 'g',NULL,NULL };
BinaryNode node8 = { 'h',NULL,NULL };
//建立节点关系
node1.lchaild = &node2;
node1.rchaild = &node6;
node2.rchaild = &node3;
node3.lchaild = &node4;
node3.rchaild = &node5;
node6.rchaild = &node7;
node7.lchaild = &node8;
int num = 0;
CaculateLeafNum(&node1, &num);
cout << "叶子节点的数目" << num;
}
int main()
{
CreateBinaryTree();
return 0;
}
求二叉树的高
//二叉树
typedef struct BINARYNODE
{
char ch;
struct BINARYNODE* lchaild; //左子树
struct BINARYNODE* rchaild; //右子树
}BinaryNode;
int CaculateTreeDepth(BinaryNode* root)
{
if (root == NULL)
{
return 0;
}
int depth = 0;
//求左子树的高
int leftDepth = CaculateTreeDepth(root->lchaild);
//求右子树的高
int rightDepth = CaculateTreeDepth(root->rchaild);
depth = leftDepth > rightDepth ? leftDepth + 1 : rightDepth + 1;
return depth;
}
void CreateBinaryTree()
{
//创建节点
BinaryNode node1 = { 'a',NULL,NULL };
BinaryNode node2 = { 'b',NULL,NULL };
BinaryNode node3 = { 'c',NULL,NULL };
BinaryNode node4 = { 'd',NULL,NULL };
BinaryNode node5 = { 'e',NULL,NULL };
BinaryNode node6 = { 'f',NULL,NULL };
BinaryNode node7 = { 'g',NULL,NULL };
BinaryNode node8 = { 'h',NULL,NULL };
//建立节点关系
node1.lchaild = &node2;
node1.rchaild = &node6;
node2.rchaild = &node3;
node3.lchaild = &node4;
node3.rchaild = &node5;
node6.rchaild = &node7;
node7.lchaild = &node8;
cout << CaculateTreeDepth(&node1) << endl;
}
int main()
{
CreateBinaryTree();
return 0;
}
二叉树拷贝与释放
//二叉树
typedef struct BINARYNODE
{
char ch;
struct BINARYNODE* lchaild; //左子树
struct BINARYNODE* rchaild; //右子树
}BinaryNode;
//遍历二叉树
void Recursion(BinaryNode* root)
{
if (root == NULL)
{
return;
}
cout << root->ch;
//遍历左子树
Recursion(root->lchaild);
//遍历右子树
Recursion(root->rchaild);
}
//拷贝二叉树
BinaryNode* CopyBinaryTree(BinaryNode* root)
{
if (root == NULL)
{
return NULL;
}
//拷贝右子树
BinaryNode* lchild = CopyBinaryTree(root->lchaild);
//拷贝左子树
BinaryNode* rchild = CopyBinaryTree(root->rchaild);
//创建节点
BinaryNode* newnode = new BinaryNode;
newnode->ch = root->ch;
newnode->lchaild = lchild;
newnode->rchaild = rchild;
return newnode;
}
//释放二叉树内存
void FreeSpaceBinaryTree(BinaryNode* root)
{
if (root != NULL)
{
return;
}
//释放左子树
FreeSpaceBinaryTree(root->lchaild);
//释放右子树
FreeSpaceBinaryTree(root->rchaild);
//释放当前节点
delete root;
}
void CreateBinaryTree()
{
//创建节点
BinaryNode node1 = { 'a',NULL,NULL };
BinaryNode node2 = { 'b',NULL,NULL };
BinaryNode node3 = { 'c',NULL,NULL };
BinaryNode node4 = { 'd',NULL,NULL };
BinaryNode node5 = { 'e',NULL,NULL };
BinaryNode node6 = { 'f',NULL,NULL };
BinaryNode node7 = { 'g',NULL,NULL };
BinaryNode node8 = { 'h',NULL,NULL };
//建立节点关系
node1.lchaild = &node2;
node1.rchaild = &node6;
node2.rchaild = &node3;
node3.lchaild = &node4;
node3.rchaild = &node5;
node6.rchaild = &node7;
node7.lchaild = &node8;
BinaryNode* root = CopyBinaryTree(&node1);
Recursion(root);
FreeSpaceBinaryTree(root);
}
int main()
{
CreateBinaryTree();
return 0;
}