遍历二叉树的应用:输出二叉树中的叶子结点、求二叉树的高度

输出二叉树中的叶子结点

在二叉树的遍历算法中增加检测结点的“左右子树是否都为空”。

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;
}

猜你喜欢

转载自blog.csdn.net/happyjacob/article/details/83120380