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

题目:

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

 

* 如果可以快速找出一个节点的父节点,则可以采用比中序遍历法更简便的方法进行求解
* 思路:
* 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 != node) {//当这个父节点是它父亲的右儿子时,就一直往上找
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     }

 

posted @ 2022-04-14 23:23  jue1e0  阅读(17)  评论(0编辑  收藏  举报