《程序员代码面试指南》第三章 二叉树问题 在二叉树中找到一个节点的后继节点

题目

在二叉树中找到一个节点的后继节点

java代码

package com.lizhouwei.chapter3;

/**
 * @Description:在二叉树中找到一个节点的后继节点
 * @Author: lizhouwei
 * @CreateDate: 2018/4/15 10:18
 * @Modify by:
 * @ModifyDate:
 */
public class Chapter3_17 {
    public DNode postNode(DNode head) {
        DNode post = null;
        if (head.right != null) {
            post = head.right;
            while (post.left != null) {
                post = post.left;
            }
        } else {
            post = head.parent;
            while (post != null && post.left != head) {
                head = post;
                post = post.parent;
            }
        }
        return post;
    }

    //测试
    public static void main(String[] args) {
        Chapter3_17 chapter = new Chapter3_17();
        DNode head = new DNode(6);
        DNode node21 = new DNode(3, head);
        DNode node22 = new DNode(9, head);
        DNode node31 = new DNode(1, node21);
        DNode node32 = new DNode(4, node21);
        DNode node33 = new DNode(8, node22);
        DNode node34 = new DNode(10, node22);
        DNode node41 = new DNode(2, node31);
        DNode node42 = new DNode(5, node32);
        DNode node43 = new DNode(7, node33);

        head.left = node21;
        head.right = node22;
        node21.left = node31;
        node21.right = node32;
        node22.left = node33;
        node22.right = node34;
        node31.right = node41;
        node32.right = node42;
        node33.left = node43;
        DNode postNode = chapter.postNode(node42);
        System.out.print("节点5的后继节点:" + postNode.value + " ");
    }
}

//双向节点
class DNode {
    public int value;
    public DNode left;
    public DNode right;
    public DNode parent;

    public DNode(int value) {
        this.value = value;
    }

    public DNode(int value, DNode left, DNode right) {
        this.value = value;
        this.left = left;
        this.right = right;
    }

    public DNode(int value, DNode parent) {
        this.value = value;
        this.parent = parent;
    }

    public DNode(int value, DNode left, DNode right, DNode parent) {
        this.value = value;
        this.left = left;
        this.right = right;
        this.parent = parent;
    }
}

结果

posted @ 2018-04-15 10:43  lizhouwei  阅读(142)  评论(0编辑  收藏  举报