找到二叉树中符合搜索二叉树条件的最大拓扑结构
生活随笔
收集整理的這篇文章主要介紹了
找到二叉树中符合搜索二叉树条件的最大拓扑结构
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
找到二叉樹中符合搜索二叉樹條件的最大拓撲結構
給定一棵二叉樹的頭節點 head,已知所有節點的值都不一樣,返回其中最大的、且符合搜索二叉樹
給定一棵二叉樹的頭節點 head,已知所有節點的值都不一樣,返回其中最大的、且符合搜索二叉樹
條件的拓撲結構的節點數。這里的拓撲結構是指,你可以在二叉樹中任意選擇某些節點,只要這些節 點是連在一起的,都叫做二叉樹的拓撲結構。
public static class Node{public int value;public Node right;public Node left;public Node(int data){this.value = data;} }public static int bstTopoSize1(Node head){if(head == null){return 0;}int max = maxTopo(head, head);max = Math.max(bstTopoSize1(head.left), max);max = Math.max(bstTopoSize1(head.right), max);return max; }public static int maxTopo(Node h, Node n){if(h != null && n != null && isBSTNode(h,n,n.value)){return maxTopo(h, n.left) + maxTopo(h, n.right) + 1;}return 0; }public static boolean isBSTNode(Node h, Node n, int value){if(h == null){return false;}if(h == n){return true;}return isBSTNode(h.value > h.left : h.right, n, value); }public static class Record{public int l;public int r;public Record(int left, int right){this.l = left;this.r = right;} }public static int bstTopoSize2(Node head){Map<Node, Record> map = new HashMap<Node, Record>();return posOrder(head, map); }public static int posOrder(Node h, Map<Node, Record> map){if(h == null){return 0;}int ls = posOrder(h.left, map);int rs = posOrder(h.right, map);modifyMap(h.left, h.value, map, true);modifyMap(h.right, h.value, map, false);Record lr = map.get(h.left);Record rr = map.get(h.right);int lbst = lr = null ? 0 : lr.l + lr.r + 1;int rbst = rr = null ? 0 : rr.l + rr.r + 1;map.put(h, new Record(lbst, rbst));return Math.max(lbst + rbst + 1, Math.max(ls, rs)); }public static int modifyMap(Node n, int v, Map<Node, Record> m, boolean s){if(n == null || (!m.containsKey(n))){return 0;}Record r = m.get(n);if((s && n.value > v) || ((!s) && n.value < v)){m.remove(n);return r.l + r.r + 1;}else{int minus = modifyMap(s ? n.right, v, m, s);if(s){r.r = r.r - minus;}else{r.l = r.l - minus;}m.put(n, r);return minus;} }總結
以上是生活随笔為你收集整理的找到二叉树中符合搜索二叉树条件的最大拓扑结构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 遍历二叉树的神级方法(Morris)
- 下一篇: 判断一棵二叉树是否为搜索二叉树、完全二叉