树数据结构的本质

时间:2017-10-21 09:36:50

标签: algorithm data-structures tree

根据博客/书籍/谷歌等。

  

树是一种数据结构,它模拟具有根的分层树结构   具有父节点的子节点的值和子树,表示为   一组链接节点

这完全没问题,但层次结构这个词让我很困惑。树可以是分层的还是线性的? 请考虑以下示例:

                           Root
                  Left-Node
         Left-Node
Left-Node

如果我们想要从root遍历最后一个元素,那么:

Root -> Left-Node -> Left-Node -> Left-Node

这不是一个线性结构(如链表)吗? 注意:我的问题并不是说“树不是分层的”,而是“树是线性的(在某些情况下)和层次结构”
你能帮助我理解错误吗?

1 个答案:

答案 0 :(得分:2)

由不是分层的树数据结构实现的功能没有多大用处。例如,二进制搜索树或红黑树或AVL树中的每一个都具有该分层性质。

示例:(分层和线性)

在二进制搜索树中,当键从根开始单调递增或递减时,它会归结为线性结构,无法为我们提供我们想要从树中获取的必要搜索功能。这就是我们选择AVL或RB树的原因。

  

是树可以是分层的也可以是线性的。偏斜时的BST仍然是分层的(它之间有父母子孙祖父关系)   他们)但他们在搜索时可以线性访问。希望这个   解释

如果元素形成序列或线性列表,则数据结构被称为线性的,例如数组,链表,队列等。在BST偏斜的情况下,它基本上形成像线性结构的链表。这就是为什么我的回答提到它是线性的。

Clarifiction-1

  

不构成线性结构(如链表)?

是的,它是一个线性结构。

线性结构:搜索linear列表所需的时间与数据集的大小成正比。例如,如果数据集的大小为n,(如果是偏斜的树),则查找(或未找到)项目所需的比较次数可能是n的倍数(此处只是一次遍历)。

这是否意味着树是线性的?

与作为线性数据结构的数组,链表,堆栈和队列相比,树是非线性数据结构。但是偏斜的特殊情况就变成了线性的。与列表等线性结构相比,偏离它的非线性性没有任何优势。

更确切地说:我们没有办法提到它是分层的,它必须是非线性的。有时线性数据结构也可以是分层的。