【剑指offer】8.二叉树的下一个节点

题目描述

给定一个二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别指向左、右孩子的指针,还有一个指向父节点的指针

public class Node {
    int val;
    TreeLinkNode left = null;
    TreeLinkNode right = null;
    TreeLinkNode parent = null;

    Node(int val) {
        this.val = val;
    }
}

思路

  1. 有右子树的时候,下一个节点为右子树的最左节点
  2. 没有右子树的时候,找父节点。当前节点为父节点的左孩子吗?是的话,返回父节点。不是的话,继续沿着父节点找上一层父节点,判断父节点是否为上一层父节点的左孩子,是则返回上一层父节点,不是接着查找…
public class GetNextNode {
    public static class Node{
        int val;
        Node left;
        Node right;
        Node parent;

        public Node(int data){
            this.val = data;
        }
    }

    public Node getNextNode(Node node){
        if(node == null) return null;

        // 有右子树
        if(node.right != null){
            while(node.left != null){
                node = node.left;
            }
            return node;
        }

        // 没有右子树
        while(node.parent != null){
            if(node.parent.left == node) return node.parent;
            node = node.parent;
        }
        return null;
    }
}


  1. List item
发布了89 篇原创文章 · 获赞 13 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/Dawn510/article/details/105259018