[刷题]Remove Node in Binary Search Tree
2015-03-31 22:29
405 查看
[LintCode]Remove Node in Binary Search Tree
/** * Definition of TreeNode: * public class TreeNode { * public int val; * public TreeNode left, right; * public TreeNode(int val) { * this.val = val; * this.left = this.right = null; * } * } */ public class Solution { /** * @param root: The root of the binary search tree. * @param value: Remove the node with given value. * @return: The root of the binary search tree after removal. */ private TreeNode lastNode; private TreeNode targetNode; private boolean findNode(TreeNode root, int value) { while (root != null) { if (root.val < value) { lastNode = root; root = root.right; } else if (root.val > value) { lastNode = root; root = root.left; } else { targetNode = root; return true;// find it } } return false; } private void deleteNode() { if (targetNode.left != null && targetNode.right != null) { if (lastNode.left == targetNode) { lastNode.left = targetNode.left; } else { lastNode.right = targetNode.left; } TreeNode temp = targetNode.left; while (temp.right != null) { temp = temp.right; } temp.right = targetNode.right; } else if (targetNode.left != null) { if (lastNode.left == targetNode) { lastNode.left = targetNode.left; } else { lastNode.right = targetNode.left; } } else if (targetNode.right != null) { if (lastNode.left == targetNode) { lastNode.left = targetNode.right; } else { lastNode.right = targetNode.right; } } else { if (lastNode.left == targetNode) { lastNode.left = null; } else { lastNode.right = null; } } } public TreeNode removeNode(TreeNode root, int value) { // 2015-3-30 if (root == null) { return root; } TreeNode dummy = new TreeNode(0); dummy.left = root; // do not find it and do nothing if (!findNode(root, value)) { return root; } if (lastNode == null) { lastNode = dummy; } deleteNode(); return dummy.left; } } // 遇到删除节点的题,一定要考虑,被删除的节点是不是根节点,使用dummyNode // 使用lastNode时,一定要考虑会不会为空指针 // 待改进
相关文章推荐
- LintCode "Remove Node in Binary Search Tree"
- lintcode:Remove Node in Binary Search Tree
- LintCode : Remove Node in Binary Search Tree
- Remove Node in Binary Search Tree
- LintCode-Remove node in Binary Search Tree
- Remove Node in Binary Search Tree
- Remove Node in Binary Search Tree 解答
- Lintcode - Remove Node in Binary Search Tree
- Lintcode: Remove Node in Binary Search Tree
- Remove Node in Binary Search Tree
- LintCode Remove Node in Binary Search Tree
- lintcode 容易题:Insert Node in a Binary Search Tree 在二叉查找树中插入节点
- LintCode Insert a Node in a Binary Search Tree 在二叉查找树中插入节点
- lintcode: Insert Node in a Binary Search Tree
- Lintcode85 Insert Node In A Binary Search Tree solution 题解
- lintcode insert-node-in-a-binary-search-tree 在二叉查找树中插入节点
- #85 Insert Node in a Binary Search Tree
- Insert Node in a Binary Search Tree
- [刷题]Insert Node in a Binary Search Tree
- LeetCode解题报告——Convert Sorted List to Binary Search Tree & Populating Next Right Pointers in Each Node & Word Ladder