微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

求二叉树的序列化下一个节点

题目:

求二叉树的序列化下一个节点(即二叉树中序遍历的下一个节点)

 

* 如果可以快速找出一个节点的父节点,则可以采用比中序遍历法更简便的方法进行求解
* 思路:
* 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 举报,一经查实,本站将立刻删除。

相关推荐