递归

C++函数有一些有趣的特点——可以调用自己,这种功能被称为递归。递归在特定的编程中是一种重要的工具。

如果递归调用自己,则被调用的函数也将调用自己,这将无限循环下去,除非代码中包含终止调用链的内容。

以下代码构造了一颗二叉树并进行遍历。

#include <stdio.h>  
#include <iostream>

using namespace std;

struct tree
{
	int data;
	int level;
	tree* left;
	tree* right;

	tree()
	{
		data = 0;
		level = 0;
		left = NULL;
		right = NULL;
	}
};

void CreateTree(tree* root)
{
	if (root != NULL && root->level < 2)
	{
		tree* left = new tree();
		left->data = root->data + 1;
		left->level = root->level + 1;
		tree* right = new tree();
		right->data = root->data + 2;
		right->level = root->level + 1;

		root->left = left;
		root->right = right;

		CreateTree(left);
		CreateTree(right);
	}
}

void PrintTreeFirstOrder(tree* root)
{
	if (root != NULL)
	{
		cout << "level:" << root->level << "; data:" << root->data << endl;

		PrintTreeFirstOrder(root->left);
		PrintTreeFirstOrder(root->right);
	}
}

void PrintTreeMidOrder(tree* root)
{
	if (root != NULL)
	{
		if (root->left != NULL)
		{
			PrintTreeMidOrder(root->left);
		}
		
		cout << "level:" << root->level << "; data:" << root->data << endl;

		PrintTreeMidOrder(root->right);
	}
}

void PrintPostOrder(tree* root)
{
	if (root != NULL)
	{
		if (root->left != NULL)
		{
			PrintPostOrder(root->left);
		}

		PrintPostOrder(root->right);

		cout << "level:" << root->level << "; data:" << root->data << endl;
	}
}

int main()
{
	tree* root = new tree();
	root->data = 1;

	CreateTree(root);

	PrintTreeFirstOrder(root);
	cout << "-----------------------------------" << endl;
	PrintTreeMidOrder(root);
	cout << "-----------------------------------" << endl;
	PrintPostOrder(root);
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值