输出二叉树中的叶子结点
在二叉树的遍历算法中增加检测结点的“左右子树是否都为空”。
void leaf(BiTree tree)
{
if (tree == NULL)
return;
if (tree->left == NULL&&tree->right == NULL)
cout << tree->data << " ";
leaf(tree->left);
leaf(tree->right);
}
求二叉树的高度
int HigthTree(BiTree tree)
{
int r, l, m;
if (tree == NULL)
return 0;
l = HigthTree(tree->left); //求左子树的深度
r = HigthTree(tree->right); //求右子树的深度
m = (l > r) ? l : r; //取左右子树较大的深度
return (1 +m);
}
c++完整代码
#include<iostream>
using namespace std;
#define len 10
typedef struct BiNode
{
int data;
struct BiNode *left, *right;
}BiNode,*BiTree;
void searchTree(BiTree &tree, BiTree &tmp)
{
if (tmp->data < tree->data)
{
if (tree->left == NULL)
{
tree->left = tmp;
return;
}
else
searchTree(tree->left, tmp);
}
if (tmp->data > tree->data)
{
if (tree->right == NULL)
{
tree->right = tmp;
return;
}
else
searchTree(tree->right, tmp);
}
}
void insertTree(BiTree &tree,BiTree &tmp)
{
if (tree == NULL)
tree = tmp;
else
searchTree(tree,tmp);
}
void createTree(BiTree &tree,int *a)
{
for (int i = 0; i < len; i++)
{
BiTree tmp = (BiTree)malloc(sizeof(BiNode));
tmp->data = a[i];
tmp->left = NULL;
tmp->right = NULL;
insertTree(tree, tmp);
}
}
void leaf(BiTree tree)
{
if (tree == NULL)
return;
if (tree->left == NULL&&tree->right == NULL)
cout << tree->data << " ";
leaf(tree->left);
leaf(tree->right);
}
int HigthTree(BiTree tree)
{
int r, l, m;
if (tree == NULL)
return 0;
l = HigthTree(tree->left); //求左子树的深度
r = HigthTree(tree->right); //求右子树的深度
m = (l > r) ? l : r; //取左右子树较大的深度
return (1 +m);
}
int main()
{
int a[len] = { 62, 88, 58, 47, 35, 73, 51, 99, 37, 93};
BiTree tree = NULL;
createTree(tree,a);
leaf(tree);
cout << endl;
cout << HigthTree(tree);
return 0;
}