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