Java与算法(12)
来源:互联网 发布:网络交易管理办法 问题 编辑:程序博客网 时间:2024/05/30 05:10
Java与算法(12)
1.二叉树节点间最大距离问题
给定头节点,求最大距离
public class MaxDIstance {public static class Node {public int value;public Node left;public Node right;public Node(int data) {this.value = data;}}public static int maxDistance(Node head) {int[] record = new int[1];return posOrder(head, record);}public static int posOrder(Node head, int[] record) {if (head == null) {record[0] = 0;return 0;}int lMax = posOrder(head.left, record);int maxfromLeft = record[0];int rMax = posOrder(head.right, record);int maxFromRight = record[0];int curNodeMax = maxfromLeft + maxFromRight + 1;record[0] = Math.max(maxfromLeft, maxFromRight) + 1;return Math.max(Math.max(lMax, rMax), curNodeMax);}public static void main(String[] args) {Node head1 = new Node(1);head1.left = new Node(2);head1.right = new Node(3);head1.left.left = new Node(4);head1.left.right = new Node(5);head1.right.left = new Node(6);head1.right.right = new Node(7);head1.left.left.left = new Node(8);head1.right.left.right = new Node(9);System.out.println(maxDistance(head1));}}
2.找出两个节点的最近公共祖先
public class LowAncestor {public static class Node {public int value;public Node left;public Node right;public Node(int data) {this.value = data;}}public static Node lowestAncestor(Node head, Node o1, Node o2) {if (head == null || head == o1 || head == o2) {return head;}Node left = lowestAncestor(head.left, o1, o2);Node right = lowestAncestor(head.right, o1, o2);if (left != null && right != null) {return head;}return left != null ? left : right;}public static void main(String[] args) {Node head = new Node(1);head.left = new Node(2);head.right = new Node(3);head.left.left = new Node(4);head.left.right = new Node(5);head.right.left = new Node(6);head.right.right = new Node(7);head.right.right.left = new Node(8);Node o1 = head.left.right;Node o2 = head.right.left;System.out.println("o1 : " + o1.value);System.out.println("o2 : " + o2.value);System.out.println("ancestor : " + lowestAncestor(head, o1, o2).value);}}
3.在二叉树找到一个节点的后继节点
public class GetNextNode {public static class Node {public int value;public Node left;public Node right;public Node parent;public Node(int data) {this.value = data;}}public static Node getNextNode(Node node) {if (node == null) {return node;}if (node.right != null) {return getLeftMost(node.right);} else {Node parent = node.parent;while (parent != null && parent.left != node) {node = parent;parent = node.parent;}return parent;}}public static Node getLeftMost(Node node) {if (node == null) {return node;}while (node.left != null) {node = node.left;}return node;}public static void main(String[] args) {Node head = new Node(6);head.parent = null;head.left = new Node(3);head.left.parent = head;head.left.left = new Node(1);head.left.left.parent = head.left;head.left.left.right = new Node(2);head.left.left.right.parent = head.left.left;head.left.right = new Node(4);head.left.right.parent = head.left;head.left.right.right = new Node(5);head.left.right.right.parent = head.left.right;head.right = new Node(9);head.right.parent = head;head.right.left = new Node(8);head.right.left.parent = head.right;head.right.left.left = new Node(7);head.right.left.left.parent = head.right.left;head.right.right = new Node(10);head.right.right.parent = head.right;Node test = head.left.right.right;Node node = getNextNode(test);System.out.println(node.value);}}
阅读全文
0 0
- Java与算法(12)
- Java与算法(1)
- Java与算法(2)
- Java与算法(3)
- Java与算法(4)
- Java与算法(5)
- Java与算法(6)
- Java与算法(7)
- Java与算法(8)
- Java与算法(9)
- Java与算法(10)
- Java与算法(11)
- Java与算法(13)
- 数据结构与算法(Java描述)-12、串的模式匹配算法(Brute-Force与KMP算法)
- FIFO与LRU 算法实现(java)
- 数据结构与算法分析(JAVA版)
- java算法心得与技巧(一)
- java数据结构与算法(一)
- 由poj 1067引发的——取石子游戏【各类取石子总结】
- 播放测试
- 解决Mysql读写分离数据延迟
- 比特币开发专题(去中心化如何实现区块链技术)
- pg_xlog_location_diff
- Java与算法(12)
- Android 动画全面剖析
- 基于(ssm,websocket,mysql)开发的web聊天系统
- 十进制转换二进制
- CentOs6.5Oracle DataGuard搭建
- Opencv(Python) 教程-常用opencv 图像/视频操作函数
- 树莓派 外接显示屏 黑屏不显示
- iOS 让Xcode打印汉字, 而不是UTF8编码
- Android源码分析:录音AudioRecording