java刷题笔记

二叉树

二叉树的下一个节点

题目

图片名称

一个二叉树示例:

图片名称

思路

中序遍历:左根右。寻找一个节点p中序遍历的下一个节点,分两种情况:

  1. p有右节点(右子树),下一个节点为右子树上最左边的节点,如节点B
  2. p无右节点,这种情况往下继续分为两种情况:a) p是其父节点的左孩子,如上面的节点G; b) p是其父节点的右孩子,如节点E

对于第一种情况,直接在其右子树上一直寻找左节点,对于第二种情况,不断寻找节点p的父节点,并判断p是否是父节点的左孩子,如果是,父节点就是下一个节点,如果不是,继续寻找父节点的父节点。

代码实现

import java.util.*;
/*
public class TreeLinkNode {
    int val;
    TreeLinkNode left = null;
    TreeLinkNode right = null;
    TreeLinkNode next = null;

    TreeLinkNode(int val) {
        this.val = val;
    }
}
*/
public class Solution {
    public TreeLinkNode GetNext(TreeLinkNode pNode) {
        if(pNode == null) return null; 
        if(pNode.right != null) return leftMostNode(pNode);
        else{
            while(pNode.next != null && pNode.next.left != pNode){
                pNode = pNode.next;
            }
            return pNode.next;
        }
        
    }
    public TreeLinkNode  leftMostNode(TreeLinkNode p){
        TreeLinkNode cur = p.right;
        while(cur.left != null){
            cur = cur.left;
        }
        return cur;
    }
}
posted @ 2022-08-10 11:42  wenchu1995  Views(26)  Comments(0Edit  收藏  举报