二叉树 :
闲话少说,直接上代码:
1 | <!DOCTYPE html> |
结果:
遍历
中序遍历:
理解双层递归
1 | function inOrder(node) { |
从根节点开始:
删除节点:
1 | function remove(data) { |
简单接受待删除的数据,具体执行是removeNode函数;
1 | function removeNode(node, data) { |
待删除的节点是:
1.叶子结点,只需要将从父节点只想它的链接指向null;
1 | if (node.left == null && node.right == null) { |
1 | if (node.left == null && node.right == null) { |
通过if else逻辑找到node节点
//#1 node.left=null(后面的函数递归后返回的值)
//#3 node.right=null(后面的函数递归后返回的值)
2.只包含一个子节点,原本指向它的节点指向它的子节点。
3.左右子树都有的时候。两种做法:找到左子树的最大值或者右子树的最小值。这里我们用第二种。
- 查找右子树的最小值,创建一个临时的节点tempNode。
- 将临时节点的值赋值给待删除节点
- 删除临时节点
注意:
//#2 //#4必须有,如果没有,则删除节点下面的所有子树都将被删除。
真个过程举个形象的说明,遍历的时候把节点之间的链条解开进行查询,return node;递归查询到最后一级后,由下向上对链条进行缝合。