当前位置: 首页 > 知识库问答 >
问题:

二叉树的C++多输入

凌和颂
2023-03-14

我正在为如何处理二叉树的多个输入而苦苦挣扎。

输入格式为:

  • 第一行采用整数n作为表示树级别的输入。
  • 接下来的n+1行按级别顺序包含树中的节点。

输入示例:

2
1
2 3
4 5 6 7

以上输入的图形表示:

     1
    / \
   /   \
  2     3
 / \   / \
4   5 6   7

我想把从第二行到最后一行的值放入向量中,但是很难得到上面的输入。

下面是我尝试的:

int main(void) {
    vector<int> tree;
    int lv, num;
    int treeSize = 1;

    cin >> lv;

    for(int i = 0; i <= lv; i++) {
        while(tree.size() < treeSize && cin >> num) {
            tree.push_back(num);
        }
        treeSize += (i + 1) * 2;
    }

    return 0;
}

我的代码不能正常工作。例如,上面的示例输入必须有总共7个节点,但如果我在一行中放了太多的数字作为输入,它会超过7个节点。

在这种情况下,有没有适当的方法来获取输入?

共有1个答案

商勇
2023-03-14

代码一眼看上去是正确的。我会在调试器中跟踪它。你的代码有点难。我会像下面这样做数组填充。

int main(void) {
    vector<int> tree;
    int lv, num;

    cin >> lv;

    for(int i = 0, lvSize = 1; i <= lv; i++; lvSize *= 2) {
        for (int j = 0; j < lvSize; && cin >> num; j++) {
            tree.push_back(num);
        }
    }

    return 0;
}

因为你读了一个向量中的树,你就知道了元素的数量,代码就可以再简化和减少一点。

int main(void) {
    vector<int> tree;
    int lv, num;

    cin >> lv;
    int size = (1 << (lv + 1)) - 1;   // This is pow(2, lv + 1) - 1

    for(int i = 0; i < size; i++) {
        tree.push_back(num);
    }

    return 0;
}
 类似资料:
  • 我正在学习C++语言,我正在尝试编写BST,但是出了问题。我尝试添加元素到空树,根是NULL,但添加元素后,根仍然是NULL,尽管添加成功了(我在调试模式下看到,节点设置为tmp)。我不知道为什么会这样。

  • 二叉树 二叉树采用二叉链表存储,要求根据给定的先序遍历序列和中序遍历序列建立二叉树,并输出后序遍历序列、结点总数、叶子数、度为1的结点数、度为2的结点数。 输入格式: 测试数据有多组,处理到文件尾。每组测试数据的第一行输入结点数n(1≤n≤10),第二、三行各输入n个整数,分别表示二叉树的先序遍历序列和中序遍历序列。 输出格式: 对于每组测试,在一行上分别输出该二叉树的后序遍历序列,结点总数,叶子

  • 主要内容:什么是二叉排序树?,使用二叉排序树查找关键字,二叉排序树中插入关键字,二叉排序树中删除关键字,总结前几节介绍的都是有关静态 查找表的相关知识,从本节开始介绍另外一种查找表—— 动态查找表。 动态查找表中做查找操作时,若查找成功可以对其进行删除;如果查找失败,即表中无该关键字,可以将该关键字插入到表中。 动态查找表的表示方式有多种,本节介绍一种使用树结构表示动态查找表的实现方法—— 二叉排序树(又称为 “二叉查找树”)。 什么是二叉排序树? 二叉排序树要么是空 二叉树,要么具有如下特点:

  • 我正在尝试用单词构建二叉搜索树。然而,当我使用上面的代码时,我只能访问我的根,根的左、右子项似乎为空。 法典:

  • 树的特征和定义 树(Tree)是元素的集合。我们先以比较直观的方式介绍树。下面的数据结构是一个树: 树有多个节点(node),用以储存元素。某些节点之间存在一定的关系,用连线表示,连线称为边(edge)。边的上端节点称为父节点,下端称为子节点。树像是一个不断分叉的树根。 每个节点可以有多个子节点(children),而该节点是相应子节点的父节点(parent)。比如说,3,5是6的子节点,6是3,

  • 2. 二叉树 2.1. 二叉树的基本概念 链表的每个节点可以有一个后继,而二叉树(Binary Tree)的每个节点可以有两个后继。比如这样定义二叉树的节点: typedef struct node *link; struct node { unsigned char item; link l, r; }; 这样的节点可以组织成下图所示的各种形态。 图 26.9. 二叉树的定义和举例 二叉树可