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

二叉树的下一个结点

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 {
    int val;
    TreeLinkNode node = null;

    public TreeLinkNode GetNext(TreeLinkNode pNode) {
        // 保留当前节点的数值
        val = pNode.val;
        // 找到整棵树的根节点
        while (pNode.next != null)  pNode = pNode.next;

        traverse(pNode);
        return node;
    }

    // In-order Traversal模板
    private void traverse(TreeLinkNode pNode) {
        // Base case: 到叶子节点以下就返回
        if (pNode == null)  return;

        traverse(pNode.left);
        // 如果已经遍历过最开始传入的子树根节点,那此时便是它的下一位节点,直接保留当前node,
        // 并再次修改val以防止重复遍历
        if (val == Integer.MAX_VALUE)  {
            val = Integer.MIN_VALUE;
            node = pNode;
        }
        // 如果当前节点正是传入的子树根节点,修改val
        if (pNode.val == val) {
            val = Integer.MAX_VALUE;
        } 
        traverse(pNode.right);
    }
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务