·完全二叉树【不带parent指针】
#include <iostream>
using namespace std;
struct BinaryTreeNode {
int m_nValue;
BinaryTreeNode* m_pLeft;
BinaryTreeNode* m_pRight;
};
/*********************************
* 可视化树结构
**********************************/
void padding(char ch, int n)
{
int i;
for (i = 0; i < n; i++)
putchar(ch);
}
void print_node(struct BinaryTreeNode *root, int level)
{
if (root == NULL)
{
padding('\t', level);
puts("NIL");
}
else
{
print_node(root->m_pRight, level + 1);
padding('\t', level);
printf("%d\n", root->m_nValue);
print_node(root->m_pLeft, level + 1);
}
}
void print_tree(struct BinaryTreeNode* root)
{
print_node(root, 0);
printf("-------------------------------------------\n");
}
/*********************************
* 算法
**********************************/
BinaryTreeNode* creatNode(int deep, int range) {
BinaryTreeNode* node = new BinaryTreeNode();
node->m_nValue = rand() % range;
node->m_pLeft = node->m_pRight = NULL;
if (deep - 1 > 0) {
node->m_pLeft = creatNode(deep - 1, range);
node->m_pRight = creatNode(deep - 1, range);
}
return node;
}
BinaryTreeNode* creatRandTree(int deep, int range) {
if (deep <= 0) {
return NULL;
}
BinaryTreeNode* root = new BinaryTreeNode();
root->m_nValue = rand() % range;
if (deep == 1) {
root->m_pLeft = NULL;
root->m_pRight = NULL;
}
else {
root->m_pLeft = creatNode(deep - 1, range);
root->m_pRight = creatNode(deep - 1, range);
}
return root;
}
int main() {
srand(1);
BinaryTreeNode* root = creatRandTree(4, 100);
print_tree(root);
system("pause");
return 0;
}
·随机形状【不带parent指针】
#include <iostream>
using namespace std;
struct BinaryTreeNode {
int m_nValue;
BinaryTreeNode* m_pLeft;
BinaryTreeNode* m_pRight;
};
/*********************************
* 可视化树结构
**********************************/
void padding(char ch, int n)
{
int i;
for (i = 0; i < n; i++)
putchar(ch);
}
void print_node(struct BinaryTreeNode *root, int level)
{
if (root == NULL)
{
padding('\t', level);
puts("NIL");
}
else
{
print_node(root->m_pRight, level + 1);
padding('\t', level);
printf("%d\n", root->m_nValue);
print_node(root->m_pLeft, level + 1);
}
}
void print_tree(struct BinaryTreeNode* root)
{
print_node(root, 0);
printf("-------------------------------------------\n");
}
/*********************************
* 算法
**********************************/
BinaryTreeNode* creatNode(int deep, int range) {
BinaryTreeNode* node = new BinaryTreeNode();
node->m_nValue = rand() % range;
node->m_pLeft = node->m_pRight = NULL;
if (deep - 1 > 0) {
if (rand() % 2)
node->m_pLeft = creatNode(deep - 1, range);
else
node->m_pLeft = NULL;
if (rand() % 2)
node->m_pRight = creatNode(deep - 1, range);
else
node->m_pRight = NULL;
}
return node;
}
BinaryTreeNode* creatRandTree(int deep, int range) {
if (deep <= 0) {
return NULL;
}
BinaryTreeNode* root = new BinaryTreeNode();
root->m_nValue = rand() % range;
if (deep == 1) {
root->m_pLeft = NULL;
root->m_pRight = NULL;
}
else {
if (rand() % 2)
root->m_pLeft = creatNode(deep - 1, range);
else
root->m_pLeft = NULL;
if (rand() % 2)
root->m_pRight = creatNode(deep - 1, range);
else
root->m_pRight = NULL;
}
return root;
}
int main() {
srand(6);
BinaryTreeNode* root = creatRandTree(5, 100);
print_tree(root);
system("pause");
return 0;
}
·随机形状【带parent指针】
#include <iostream>
using namespace std;
struct BinaryTreeNode {
int m_nValue;
BinaryTreeNode* m_pLeft;
BinaryTreeNode* m_pRight;
BinaryTreeNode* m_pParent;
};
/*********************************
* 可视化树结构
**********************************/
void padding(char ch, int n)
{
int i;
for (i = 0; i < n; i++)
putchar(ch);
}
void print_node(struct BinaryTreeNode *root, int level)
{
if (root == NULL)
{
padding('\t', level);
puts("NIL");
}
else
{
print_node(root->m_pRight, level + 1);
padding('\t', level);
printf("%d\n", root->m_nValue);
print_node(root->m_pLeft, level + 1);
}
}
void print_tree(struct BinaryTreeNode* root)
{
print_node(root, 0);
printf("-------------------------------------------\n");
}
/*********************************
* 算法
**********************************/
BinaryTreeNode* creatNode(int deep, int range, BinaryTreeNode* parent) {
BinaryTreeNode* node = new BinaryTreeNode();
node->m_pParent = parent;
node->m_nValue = rand() % range;
node->m_pLeft = node->m_pRight = NULL;
if (deep - 1 > 0) {
if (rand() % 2)
node->m_pLeft = creatNode(deep - 1, range, node);
else
node->m_pLeft = NULL;
if (rand() % 2)
node->m_pRight = creatNode(deep - 1, range, node);
else
node->m_pRight = NULL;
}
return node;
}
BinaryTreeNode* creatRandTree(int deep, int range) {
if (deep <= 0) {
return NULL;
}
BinaryTreeNode* root = new BinaryTreeNode();
root->m_pParent = NULL;
root->m_nValue = rand() % range;
if (deep == 1) {
root->m_pLeft = NULL;
root->m_pRight = NULL;
}
else {
if (rand() % 2)
root->m_pLeft = creatNode(deep - 1, range, root);
else
root->m_pLeft = NULL;
if (rand() % 2)
root->m_pRight = creatNode(deep - 1, range, root);
else
root->m_pRight = NULL;
}
return root;
}
int main() {
srand(6);
BinaryTreeNode* root = creatRandTree(5, 100);
print_tree(root);
system("pause");
return 0;
}