zoukankan      html  css  js  c++  java
  • 二叉树最长距离

    tag: 二叉树

    思路:

    最长距离一定是两个叶子节点之间的距离

           => 两个叶子节点必定以某个节点为根节点

           => 因此用DFS思路自底向上计算经过每一个节点的最长距离,取其最大值

    以每个节点为根节点的最长距离 = 左子树的高度+右子树的高度

    package com.zhaochao.tree;
    
    /**
     * Created by zhaochao on 17/1/25.
     */
    public class MaxDistanceOfBT {
    
        int max = 0;
        public int maxDistance(TreeNode root) {
            if(root == null) {
                return 0;
            }
            if(root.left == null && root.right == null) {
                return 0;
            }
            //双枝
            max = Math.max(getHeight(root.left) + getHeight(root.right),max);
            //返回单枝
            return Math.max(getHeight(root.left),getHeight(root.right));
        }
    
    
        public int getHeight(TreeNode root) {
            if(root == null) {
                return 0;
            }
            int left = getHeight(root.left);
            int right = getHeight(root.right);
            return Math.max(left, right) + 1;
        }
    
        public static void main(String[] args) {
    
            TreeNode root = new TreeNode(0);
            TreeNode node1 = new TreeNode(1);
            TreeNode node2 = new TreeNode(2);
            TreeNode node3 = new TreeNode(3);
            TreeNode node4 = new TreeNode(3);
            TreeNode node5 = new TreeNode(3);
            TreeNode node6 = new TreeNode(3);
            TreeNode node7 = new TreeNode(3);
            TreeNode node8 = new TreeNode(3);
            TreeNode node9 = new TreeNode(3);
    
            root.left = node1;
            root.right = node2;
            node1.left = node3;
            node3.left = node8;
            node8.left = node9;
            node1.right = node5;
            node5.right = node6;
            node2.right = node4;
    
            MaxDistanceOfBT test = new MaxDistanceOfBT();
    
            test.maxDistance(root);
            System.out.println(test.max);
    
        }
    
    }
    

      

  • 相关阅读:
    Python-Image 基本的图像处理操作
    剪枝
    poj1182(食物链)续
    HLG2035广搜
    HLG2040二叉树遍历已知前中,求后
    先序,中序,后序,已知两者求第三者
    C++中new的解说
    僵尸进程
    HLG2062(make,heap问题)
    make_head,,,pop_head,,,push_head,,,sort_head..
  • 原文地址:https://www.cnblogs.com/superzhaochao/p/6351230.html
Copyright © 2011-2022 走看看