题解 | #二叉树的下一个结点#

二叉树的下一个结点

https://www.nowcoder.com/practice/9023a0c988684a53960365b889ceaf5e

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 {
    TreeLinkNode last = null;
    TreeLinkNode result = null;
    TreeLinkNode goal = null;

    public TreeLinkNode GetNext(TreeLinkNode pNode) {
        // 中序遍历 左中右,递归
        // 记录last,然后比较last.val==pNode.val
        goal = pNode;
        TreeLinkNode root = pNode;
        while(root.next != null) {
            root = root.next;
        }
        middle(root);
        return result;
    }

    void middle(TreeLinkNode pNode) {
        if(pNode == null) {
            return;
        }
        middle(pNode.left);
        if(last != null && last.val == goal.val) {
            result = pNode;
        }
        last = pNode;
        middle(pNode.right);
    }
    //     5
    //   4   #
    //  3 #
    // 2
}

首先while+next找到root,同时记录goal就是对比的目标。然后对root做中序遍历,遍历的同时,记录last,且判断last是否等于goal,如果等于,则给result设置为cur。

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务