首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >生成平衡二叉树

生成平衡二叉树
EN

Stack Overflow用户
提问于 2016-05-22 00:19:24
回答 1查看 483关注 0票数 0

我不知道这是否在做它应该做的事情。我的目标是从一组值生成一个平衡的二叉树。如果这是正确的,请告诉我。

注意:不是平衡的二叉树,只是平衡的二叉树。

代码语言:javascript
复制
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 ";
  }
}

主要是..。

代码语言:javascript
复制
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();

我得到的结果是:

代码语言:javascript
复制
            7
         4 
         6
     2
         5
     3
 1

2岁的孩子是4岁和5岁,问题是为什么7岁还在上一个台阶。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-22 08:49:46

7之所以出现在它的位置,是因为在addNodePrivate方法中检查两个子分支的高度,如果它们相等,它就左转。

因此,当插入7时,当程序位于根(节点1)时,它会看到左分支的高度和右分支的高度都等于1(节点2有子5和4,但没有孙辈,节点3有子6,也没有孙子),所以节点2向左向下分支。

为了实现你想要的,你需要选择路径最短的分支,所以仅仅比较两个分支的高度是不够的。

希望这能帮上忙祝你好运。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37369323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档