给定一棵二叉树的头节点head,任何两个节点之间都存在距离,返回整棵二叉树的最大距离

题意:树节点之间距离为,节点A到B的节点数.

思路:

递归 每个节点 求出 

1 当前节点的最大距离

2 当前节点高度

这样到下一个节点的时候就有3中可能

1 左节点最大距离最大

2 有节点最大距离最大

3 左节点高度+有节点高度+1 距离最大

最后返回的节点就是最大距离

Node:

        1 当前节点高度

        2 当前节点最大距离

代码:

package 算法.二叉树;

public class test5 {
    /**
     * 树节点
     */
    public static class Node {
        //1 当前节点最长
        public int maxNodeNum;
        //2 当前节高度
        public int high;

        public int num;
        public  Node left;
        public  Node right;

        public Node(int maxNodeNum, int high) {
            this.maxNodeNum = maxNodeNum;
            this.high = high;
        }
    }

    public static Node process(Node node){
        if (node == null) {
            return new Node(0,0);
        }
        Node l = process(node.left);
        Node r = process(node.right);
        
        //1 当前节点是最长节点
        int p1 = l.high+r.high+1;
        //2 左是最长
        int p2 = l.maxNodeNum;
        //3 右边是最长
        int p3 = r.maxNodeNum;
        node.maxNodeNum = Math.max(p1,Math.max(p2,p3));
        //4 高度
        node.high = Math.max(l.high,r.high)+1;
        
        return node;
    }
    public static void main(String[] args) {
        process(null);
    }
}

猜你喜欢

转载自blog.csdn.net/u010191034/article/details/121347844