题目:
* 如果可以快速找出一个节点的父节点,则可以采用比中序遍历法更简便的方法进行求解
* 思路:
* 1.先看这个节点有没有右子树,如果有右子树,则返回右子树的最左节点
* 2.如果没有右子树,就向上找它的父节点,直到找到一个父节点它是作为它父亲的左儿子即可返回该父节点
代码及解析:
1 public static Node getSuccessorNode(Node node) { 2 if (node == null) { 3 return null; 4 } 5 if (node.right != null) {//如果这个节点有右子树 6 return getMostLeft(node.right); 7 } 8 else { 9 Node parent = node.parent; 10 while (parent != null && parent.left != null) {//当这个父节点是它父亲的右儿子时,就一直往上找 11 //直到找到父亲的左儿子或者为空时结束 12 node = parent; 13 parent = node.parent; 14 } 15 return parent; 16 } 17 } 18 19 public static Node getMostLeft(Node root) { 20 while (root.left != null) { 21 root = root.left; 22 } 23 return root; 24 }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。