【发布时间】:2014-02-02 00:21:25
【问题描述】:
当被要求创建二叉树的副本时,我总是被告知要使用后序遍历逻辑来创建副本。
是否无法按顺序或按顺序处理原始树以创建副本?
任何遍历方法比另一种更优化?
后订购方式:
NODEPTR Copy(NODEPTR p)
{
if (p == null) return p
NODEPTR left = Copy(p-> left)
NODEPTR right = Copy(p-> right)
NODEPTR root = MakeBT(p->data, left, right) //MakeBT is a helper function that makes a tree
return (root)
}
预购方式:
NODEPTR Copy(NODEPTR p)
{
if (p == null) return p
NODEPTR root
root->data = p->data
root-> left = Copy(p-> left)
root-> right = Copy(p-> right)
return (root)
}
顺序方式:
NODEPTR Copy(NODEPTR p)
{
if (p == null) return p
NODEPTR left = Copy(p-> left)
NODEPTR root
root-> data = p-> data
root-> left = left
root-> right = Copy(p-> right)
return (root)
}
【问题讨论】:
-
你试过三种方式都写吗?
-
用我的尝试编辑了这个问题
-
看,您已经通过尝试回答了部分自己的问题。所以继续努力吧。
-
好吧,也试了下有序的方式。请大家确认一下正确性好吗?
标签: binary-tree