我试图想出一个从二叉树/二叉树中删除重复项的算法。到目前为止我能想到的是
将树的顺序遍历存储在数组中。
如果树没有排序,则对数组进行排序。
从数组中删除重复项并重建二叉树。
我们是否也需要存储树的预顺序遍历来重建树?
这使得复杂性出现在O(n log n )时间和O(n)空间上。我们能做得更好吗?伪代码/代码示例将不胜感激。
编辑1:假设二叉树的结构由以下对象提供
public class Node
{
int data;
Node right;
Node left;
// getters and setters for the left and right node
生成了一个二叉树,如下所示
class Node:
def __init__(self,data):
# Left Child
self.left = None
# Right Child
self.right = None
# Node Value
self.data = data
def insert(self, data):
# Compare the new value with the parent node
if self.data:
我在中看到了二叉树的定义
另一种定义二叉树的方法是对有向图进行递归定义。二叉树是:
一个顶点。
一种图,由两个二叉树,加一个顶点,加上一个从新的顶点指向每个二叉树的根的边。
那么,怎么可能有一个根和一个左子的二叉树,像这样:
O
/
O
这是一棵二叉树对吧?我在这里错过了什么?
请不要只说“维基百科可能是错的”,我在其他地方也看到过这个定义。