- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个问题。我必须将锯齿形格式的二叉树转换为双向链表。
Given BT: [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15]ZigZag order of BT in DLL: [1] [3] [2] [4] [5] [6] [7] [15] [14] [13] [12] [11] [10] [9] [8]
Here is my pseudocode:
DLLNode* ConvertBTToZigZgDLL(Node* root)
{
DLLNode* start=createDLLNode(root->data);
DLLNode* tail=start;
Stack<Node> stack1, stack2;
stack1.push(root->left);
stack1.push(root->right);
while( !stack1.Empty() || !stack2.Empty() )
{
while(stack1.HasElement())
{
Node* temp=stack1.Pop();
stack2.push(temp->right);
stack2.push(temp->left);
tail=Attach(tail,createDLLNode(temp->data));
tail=tail->next;
}
while(stack2.HasElement())
{
Node* temp=stack2.Pop();
stack1.push(temp->left);
stack1.push(temp->right);
tail=Attach(tail,createDLLNode(temp->data));
tail=tail->next;
}
}
return start;
} 这里的 TimeComplexity O(N),其中 N 是给定二叉树中的节点数。
DLLNode* Attach(DLLNode* source, DLLNode* dest)
{
source.Next=dest;
dest.prev=source;
return source;
}
DLLNode* CreateDLLNode(int data)
{
DLLNode* res=malloc(sizeof(struct DLLNode));
res->data=data;
res->prev=NULL;
res->next=NULL;
return res;
}
我只想知道我的代码的逻辑有什么问题。
一位 friend 说上面的代码行不通而且是错误的。我找不到我的逻辑会失败的任何用例(排除空检查/空/空节点)
只需检查我的代码逻辑并告诉我即可。
我的逻辑很简单:使用 2 个堆栈。在 stack1 中,我总是先推左 child ,然后是右 child ,在 stack2 中,我总是先推右 child ,然后推左 child 。最初加载 stack1,而 stack1 是非空 pop,并将相应的右/左子节点压入 stack2。对于上面的例子,我的堆栈状态应该像 s1-B[2,3]T s2-B[7,6,5,4]T s1-B[8,9,10,11,12,13,14, 15]T B-stack 底部 T-Stack 顶部。请再次检查。谢谢。
最佳答案
算法:
使用修改后的 BFS 算法,其中使用两个堆栈而不是单个 fifo 队列 stack1
用于包含要从右到左访问的级别中的节点,而 stack2
包含要从左到右访问的节点。
列表用根节点初始化,第一层(最接近根节点)存储在stack1
中。因此,第一次通过 stack1
将以适当的顺序拉取第一层。
对于一般情况证明,假设 stack1
中的元素以正确的顺序存储,从 stack1
中拉出节点 N 确保它们被处理从右到左的顺序。对于每个如此处理的节点,子树先右后左地存储在 stack2
中。这保证了从 stack2
中为第 N+1 层检索的节点列表具有从左到右的顺序。当第 N 层不再有节点时,while
循环完成。此时从 stack2
中提取节点将以 left-to 检索第 N+1 层的所有节点-正确的顺序。
相反,从左到右的每一层从stack2
中拉取节点时,将stack1
中的子节点先左后右存储,确保当它们是在下一次迭代中以从右到左的顺序拉出。
所以基本上该算法被证明是合理的。现在这并不能确保实现。特别是,您将所有 NULL 指针添加到堆栈,这意味着您将检索它们,然后尝试读取它们。
关于algorithm - 将 Zigzag 顺序的二叉树转换为双向链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5282052/
我有 2 个类:User 和 UserPicture,它们具有 1:1 关系。 public class User { @Id @GeneratedValue(strategy=G
使用ssh转发时,我无法针对远程服务器使用cvs和ftp进行提交。是否可以让服务器对我的机器发起请求-我希望服务器上的Web应用程序调用我的机器上的REST方法。 谢谢。 尼古拉·G。 最佳答案 是的
我正在 Python 2.7.12 中实现双向 A* 算法,并在 Russell 和 Norvig 第 3 章的罗马尼亚 map 上进行测试。边具有权重,目的是找到两个节点之间的最短路径。 这是测试图
您能否建议一种映射或类似的数据结构,让我们可以轻松地相互获取值和键。也就是说,每个都可以用来寻找另一个。 最佳答案 Java 在其标准库中没有双向映射。 例如使用 BiMap 来自Google Gua
我想同步两个数据库运行时 服务器 A:安装了公共(public) IP 和 mysql 的 Amazon ec2。服务器B:这是局域网中带有mysql的私有(private)机器。 (IP是私有(pr
保存双向@OneToOne 映射时,hibernate 是否应该在两个表上都记录? 我有一个包含 applicant_id 列的表 interview,它引用了包含字段 interview_id 的
我喜欢新的 SwipeRefreshLayout!它看起来很棒,而且非常容易使用。但我想在两个方向上使用它。我有一个消息屏幕,我想通过从上到下滑动来加载旧消息,我想通过从下到上滑动来加载新消息。 这个
使用 ICS 4.0.1(愿意升级到 4.0.3)(不会 root 和重写 android 操作系统) 在接收到 android beam 后,是否可以将 NDEF 消息发送回 android 手机
我想知道处理这种 git 场景的最佳方法: Git 仓库:CoreProduct Git repo b: SpecificCustomerProduct 是从 a fork 出来的 到目前为止,我们一
这个问题在这里已经有了答案: How to implement an efficient bidirectional hash table? (8 个回答) 关闭2年前。 我在 python 中做这个
您能否推荐一种 map 或类似的数据结构,我们可以在其中轻松地从彼此获取值和键。也就是说,每个都可以用来寻找另一个。 最佳答案 Java 在其标准库中没有双向映射。 例如使用 BiMap 来自 Goo
Java中是否有类似双面列表的东西?也许第三方实现? 这里有一个小例子来证明我的想法。 原始状态: 答:0-1-2-3 | | | | 乙:0-1-2-3 删除 B 中的元素 1 后: 空值 | 答:
我有两个实体通过这样的双向 OneToOne 关联连接: @Entity class Parent { @NotNull String businessKey; @OneToO
我已将 Vagrant 配置为使用 Rsync 共享文件夹而不是(非常慢)vboxsf VirtualBox 默认提供的文件系统: Vagrant.configure("2") do |config|
@keyframes mgm { from { max-height: 250px; } to { max-height: 0px; } } .mgm {
我想了解有关使用双向 LSTM 进行序列分类时合并模式的更多详细信息,尤其是对于我还不清楚的“Concat”合并模式。 根据我对这个方案的理解: 在将前向和后向层的合并结果传递到 sigmoid 函数
我有兴趣将本地 git 存储库设置为远程存储库的镜像。我已经阅读了一些可能相关的帖子,但主要区别在于我需要对两个存储库进行读写访问。 大多数时候,用户会针对 Repo A 工作,但是有时他们会针对 R
我已经仔细阅读了文档 https://firebase.google.com/docs/database/web/read-and-write以及网上很多例子。但这里有一个脱节:在将对象添加到数据库时
这个问题已经有答案了: Hibernate bidirectional @ManyToOne, updating the not owning side not working (3 个回答) 已关闭
我知道有很多关于它的问题,但我找不到针对我的问题的好的答案。 我使用 Jboss 作为 7,Spring 和 Hibernate (4) 作为 JPA 2.0 提供程序,因此我有简单的 @OneToM
我是一名优秀的程序员,十分优秀!