根据博客/书籍/谷歌等。
树是一种数据结构,它模拟具有根的分层树结构 具有父节点的子节点的值和子树,表示为 一组链接节点
这完全没问题,但层次结构这个词让我很困惑。树可以是分层的还是线性的? 请考虑以下示例:
Root
Left-Node
Left-Node
Left-Node
如果我们想要从root遍历最后一个元素,那么:
Root -> Left-Node -> Left-Node -> Left-Node
这不是一个线性结构(如链表)吗?
注意:我的问题并不是说“树不是分层的”,而是“树是线性的(在某些情况下)和层次结构”
你能帮助我理解错误吗?
答案 0 :(得分:2)
由不是分层的树数据结构实现的功能没有多大用处。例如,二进制搜索树或红黑树或AVL树中的每一个都具有该分层性质。
在二进制搜索树中,当键从根开始单调递增或递减时,它会归结为线性结构,无法为我们提供我们想要从树中获取的必要搜索功能。这就是我们选择AVL或RB树的原因。
是树可以是分层的也可以是线性的。偏斜时的BST仍然是分层的(它之间有父母子孙祖父关系) 他们)但他们在搜索时可以线性访问。希望这个 解释强>
如果元素形成序列或线性列表,则数据结构被称为线性的,例如数组,链表,队列等。在BST偏斜的情况下,它基本上形成像线性结构的链表。这就是为什么我的回答提到它是线性的。
不构成线性结构(如链表)?
是的,它是一个线性结构。
线性结构:搜索linear
列表所需的时间与数据集的大小成正比。例如,如果数据集的大小为n,(如果是偏斜的树),则查找(或未找到)项目所需的比较次数可能是n的倍数(此处只是一次遍历)。
与作为线性数据结构的数组,链表,堆栈和队列相比,树是非线性数据结构。但是偏斜的特殊情况就变成了线性的。与列表等线性结构相比,偏离它的非线性性没有任何优势。
更确切地说:我们没有办法提到它是分层的,它必须是非线性的。有时线性数据结构也可以是分层的。