分类:1.平衡树,全部叶子位于同一层或者至少彼此相差不超过一层。2.彻底树,在平衡的基础上,底层全部叶子位于树的左边。3.满树,对于一个n元树,每层叶子都是满的,且均在同一层。html
模拟连接法。建立一个node型数组,使得每一个元素存储下一个children的地址。问题,当删除一个结点时,若是不保留原结点位置,子结点移动时将会很是麻烦。若是只将其内部元素删除,保留内部结点的引用关系,又会占用空间。java
层序遍历。顾名思义,一层一层的遍历。从根节点开始。直到最后一层。
node
2^h-1
个结点git
此时将一个顺序列表存入其中,树变为了右单子树或左单子树。问题出现了,此时的树直接变成了列表,查找效率也从O(logn)变为O(n)。为了解决这个问题,咱们引入了平衡树的概念。如此,对于以不管何种顺序存入树的元素,不至于存的太深。在各个子树最多只能相差一的限制下,树的优点得以保留。算法
if (next == null) return null; if (next.getElement().equals(targetElement)) return next; BinaryTreeNode<T> temp = findNode(targetElement, next.getLeft()); if (temp == null) temp = findNode(targetElement, next.getRight()); return temp;
BinaryTreeNode<T> current = findNode(targetElement, root); if (current == null) throw new ElementNotFoundException("LinkedBinaryTree"); return (current.getElement());
分别锁定了对应的位置和结点。所以任意调用这两个方法之一,便可找出相应的右子树。从而将其删除。删除时,将对应结点视为树的根,直接将根所在的LinkedBinary树等于null便可。数组
显示了报错,同时没法执行代码。反复尝试无果后,发现以前使用栈实现了一个Postfixtest,而本章也有一个使用数实现的计算后缀表达式的程序,在将其重名的更名后,重启了几回idea后,如愿恢复了正常。个人理解是,首先idea必须保证全部程序不出错,不然其余程序编译将没法经过,同时,对于两个同名程序,没法判断执行哪一个,所以选择不执行,知道将其改变。数据结构
但是,抛出的是空指针异常,也就是并未找到所要删除的结点。因此问题不在这里。在于findnode方法,在方法体,我设置传入了一个的LinkedBinary的参数,可是,该树此时为空,天然将致使其为空指针。ide
解决了这个问题,再到contain方法,又出现了问题。依旧为空,仔细比对,发现了问题。在方法头,从新实例化了一个LinkedBinary对象,可是,其实树已经在以前方法肯定,从新实例化反而至关于将其清空,形成空指针的状况。学习
第一次学习非线性数据结构,对于某些知识还不是很了解,将继续对这些展开学习
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/1 | 3/3 | |
第二周 | 409/409 | 1/2 | 5/8 | |
第三周 | 1174/1583 | 1/3 | 10/18 | |
第四周 | 1843/3426 | 2/5 | 10/28 | |
第五周 | 539/3965 | 2/7 | 20/48 | |
第六周 | 965/4936 | 1/8 | 20/68 |