- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
问题陈述:打印二叉树的顶 View
我的方法:我维护一个队列,队列中有一对,分别用于root->data
和horizontal distance(hd)
。我将队列中带有hd
的根 push 队列,并将其添加到包含map
和hd
的root->data
中。然后我从队列中 pop 。现在,如果有任何 pop 根节点的子节点,我将它们插入队列,上面的过程将继续进行,直到队列不为空。
我的代码:-
void topView(Node * root) {
queue<pair<int, int>> q;
map<int, int> m;
q.push({root->data, 0});
while(q.empty() == false){
int node_val = q.front().first;
int hd = q.front().second;
m[hd] =node_val;
q.pop();
if(root->left){
int hdl = hd -1;
q.push({root->left->data, hdl});
}
if(root->right){
int hdr = hd + 1;
q.push({root->right->data, hdr});
}
}
for(auto i=m.begin();i!=m.end();i++)
{
cout<<i->second<<" ";
}
}
最佳答案
您的代码中有两个问题。一种是您只将节点值存储在队列中,而不是节点指针。所以你的遍历条件
if(root->left)
仅检查根节点的子节点。这导致无限循环,因为我们没有遍历根节点。
m[hd] = node_val
由于这将覆盖每个hd,因此将为您提供底 View 。我们想在这里为每个高清镜头第一次出现。我已经更新了代码。
void topView(Node * root) {
queue<pair<Node*, int>> q;
map<int, int> m;
q.push({root->data, 0});
while(q.empty() == false){
Node* current_node = q.front().first;
int node_val = current_node->data;
int hd = q.front().second;
if(m.find(hd) == m.end())
m[hd] =node_val;
q.pop();
if(current_node->left){
int hdl = hd -1;
q.push({current_node->left, hdl});
}
if(current_node->right){
int hdr = hd + 1;
q.push({current_node->right, hdr});
}
}
for(auto i=m.begin();i!=m.end();i++)
{
cout<<i->second<<" ";
}
}
关于c++ - 此代码有什么问题?它永无止境(二叉树的顶 View ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64107248/
下面的代码永远不会结束。这是为什么? #include #include #include #define SIZE 5 int nums[SIZE] = {0, 1, 2, 3, 4}; in
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题吗? 通过 editing this post 添加细节并澄清问题. 关闭 8 年前。 Improve t
我在 Node 中的 promise 方面遇到了问题,特别是在下面的代码中,我编写这些代码是为了执行 MySQL 查询,以便我的所有其他 100 多个函数可以共享它,而不是内联编写它。来自 PHP 开
我需要从表中删除重复项,同时保留一项。由于在 where 语句内的子查询中访问同一个表时无法从表中删除,因此我决定将受影响的 ID 存储在临时表中: create temporary my_temp_
我有以下 json 对象: "comments": [ {"username": "test", "comment": "This is a comment", "child": [
我正在尝试学习如何使用 hadoop 流。我正在尝试运行一个非常简单的映射器,并且没有缩减器。当我运行该程序时,它完成了 100% 的 map task ,然后在十分钟内什么都不做,然后报告它已完成所
我正在为 git 可执行文件创建一个简单的 Java 包装器,我想在我的应用程序中使用它。一个小代码示例: public static void main(String[] args) {
我正在学习react.js,并且我使用安装了react-tools的npm。但是在我输入命令: jsx --watch src/build/后,我对 jsx 文件做了一些更改。控制台日志: app.j
今天我下载了 Visual Studio 2012 的更新 4。我已经从Microsoft网站下载了文件VS2012.4.exe。我已从命令行“VS2012.4.exe/layout”运行此文件。这已
有时,在我搜索某些内容(或不小心单击“搜索定义”)后,主要是在 PHP 文件中,VS 开始永无止境的(运行蓝线)搜索(并且我在此期间听到 CPU 负载)。但是,我不能取消那个,没有 Esc 和 Ctr
我在 MySQL 上遇到性能问题。数据库包含大约40万条记录,站点在Drupal上运行,所有列都有索引。不幸的是,有些广告没有所有数据,所以我需要使用 LEFT JOIN 而不是 INNER JOIN
我是一名优秀的程序员,十分优秀!