·完全二叉树【不带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</