我不知道这是否在做它应该做的事情。我的目标是从一组值生成一个平衡的二叉树。如果这是正确的,请告诉我。
注意:不是平衡的二叉树,只是平衡的二叉树。
int heightPrivate(nodePtr node)
{
if (node == NULL)
return -1;
return 1 + std::max(heightPrivate(node->left), heightPrivate(node->right));
}
void addNodePrivate(nodePtr node, int val)
{
if (root == NULL)
{
root = new BTNode;
root->data = val;
root->left = root->right = NULL;
}
else
{
if (node->left == NULL)
{
node->left = new BTNode;
node->left->data = val;
node->left->left = node->left->right = NULL;
}
else if (node->right == NULL)
{
node->right = new BTNode;
node->right->data = val;
node->right->left = node->right->right = NULL;
}
else
{
int lheight = heightPrivate(node->left);
int rheight = heightPrivate(node->right);
if (lheight < rheight)
addNodePrivate(node->left, val);
else if (rheight < lheight)
addNodePrivate(node->right, val);
else
addNodePrivate(node->left, val);
}
}
}
void printPostorderPrivate(nodePtr p, int indent=0)
{
if(p != NULL) {
if(p->left) printPostorderPrivate(p->left, indent+4);
if(p->right) printPostorderPrivate(p->right, indent+4);
if (indent) {
std::cout << std::setw(indent) << ' ';
}
std::cout<< p->data << " \n ";
}
}主要是..。
int main()
{
BTree tree;
tree.addNode(1);
tree.addNode(2);
tree.addNode(3);
tree.addNode(4);
tree.addNode(5);
tree.addNode(6);
tree.addNode(7);
tree.printPostorder();我得到的结果是:
7
4
6
2
5
3
12岁的孩子是4岁和5岁,问题是为什么7岁还在上一个台阶。
发布于 2016-05-22 08:49:46
7之所以出现在它的位置,是因为在addNodePrivate方法中检查两个子分支的高度,如果它们相等,它就左转。
因此,当插入7时,当程序位于根(节点1)时,它会看到左分支的高度和右分支的高度都等于1(节点2有子5和4,但没有孙辈,节点3有子6,也没有孙子),所以节点2向左向下分支。
为了实现你想要的,你需要选择路径最短的分支,所以仅仅比较两个分支的高度是不够的。
希望这能帮上忙祝你好运。
https://stackoverflow.com/questions/37369323
复制相似问题