日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

找到二叉树中符合搜索二叉树条件的最大拓扑结构

發布時間:2025/4/16 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 找到二叉树中符合搜索二叉树条件的最大拓扑结构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
找到二叉樹中符合搜索二叉樹條件的最大拓撲結構
給定一棵二叉樹的頭節點 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;} }

總結

以上是生活随笔為你收集整理的找到二叉树中符合搜索二叉树条件的最大拓扑结构的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。