网易 二叉树

来源:互联网 发布:c语言的三种基本结构 编辑:程序博客网 时间:2024/04/29 07:07

有一棵二叉树,树上每个点标有权值,权值各不相同,请设计一个算法算出权值最大的叶节点到权值最小的叶节点的距离。二叉树每条边的距离为1,一个节点经过多少条边到达另一个节点为这两个节点之间的距离。
给定二叉树的根节点root,请返回所求距离。

/*public class TreeNode {    int val = 0;    TreeNode left = null;    TreeNode right = null;    public TreeNode(int val) {        this.val = val;    }}*/public class Tree {     TreeNode maxNode = new TreeNode(Integer.MIN_VALUE);    TreeNode minNode = new TreeNode(Integer.MAX_VALUE);    int steps;    public int getDis(TreeNode root) {        getMaxMinNode(root);        TreeNode father = lca(root, minNode, maxNode);        steps = 0;        getSteps(father, maxNode, 0);        int maxSteps = steps;        steps = 0;        getSteps(father, minNode, 0);        int minSteps = steps;        return maxSteps + minSteps;    }    public void getMaxMinNode(TreeNode root) {        if (root == null) {            return;        }        if (root.left == null && root.right == null) {            if (root.val > maxNode.val) {                maxNode = root;            }            if (root.val < minNode.val) {                minNode = root;            }        }        getMaxMinNode(root.left);        getMaxMinNode(root.right);    }    public void getSteps(TreeNode root, TreeNode node, int level) {        if (root == null) {            return;        }        if (root == node) {            steps = level;            return;        }        getSteps(root.left, node, level + 1);        getSteps(root.right, node, level + 1);    }    public TreeNode lca(TreeNode root, TreeNode node1, TreeNode node2) {        if (root == null) {            return root;        }        boolean exist1 = hasNode(root.left, node1);        boolean exist2 = hasNode(root.left, node2);        if (exist1 && exist2) {            return lca(root.left, node1, node2);        }        exist1 = hasNode(root.right, node1);        exist2 = hasNode(root.right, node2);        if (exist1 && exist2) {            return lca(root.right, node1, node2);        }        return root;    }    public boolean hasNode(TreeNode root, TreeNode node) {        if (root == null || node == null) {            return false;        }        if (root == node) {            return true;        }        return hasNode(root.left, node) || hasNode(root.right, node);    }}
0 0
原创粉丝点击