zoukankan      html  css  js  c++  java
  • 《程序员代码面试指南》第三章 二叉树问题 在二叉树中找到一个节点的后继节点

    题目

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

    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;
        }
    }
    
    

    结果

  • 相关阅读:
    hdu 1060 Leftmost Digit
    HDU 1081 To The Max 动态规划
    不安装Oracle客户端,透过PL/SQL Developer连接Server DB
    ASP.net:Ftp操作FtpWebRequest
    VS2008:log4net.dll 使用
    社会生活——《哥哥又逃票了》
    VS2008:AjaxPro.2 的应用
    Linq to SQL 根据自己需要更改数据源
    ExtJS Combobox 如何改变下拉列列宽问题
    ExtJs 的Enter特殊键事件处理
  • 原文地址:https://www.cnblogs.com/lizhouwei/p/8846159.html
Copyright © 2011-2022 走看看