From 09eca02701d369e82b29c08b403688648c1d4bc6 Mon Sep 17 00:00:00 2001
From: Hentua <wangdoubleone@gmail.com>
Date: Tue, 06 Jun 2023 00:27:45 +0800
Subject: [PATCH] 矩阵修改

---
 src/main/java/cc/mrbird/febs/common/tree/MatrixTree.java |   30 +++++++++++++++++++++++++++---
 1 files changed, 27 insertions(+), 3 deletions(-)

diff --git a/src/main/java/cc/mrbird/febs/common/tree/MatrixTree.java b/src/main/java/cc/mrbird/febs/common/tree/MatrixTree.java
index 3356f8f..ebcf9ff 100644
--- a/src/main/java/cc/mrbird/febs/common/tree/MatrixTree.java
+++ b/src/main/java/cc/mrbird/febs/common/tree/MatrixTree.java
@@ -40,7 +40,20 @@
             return null;
         }
 
-        MemberNode parentNode = findNotWholeNode();
+        MemberNode childTreeRoot = getNode(node.getRefererId());
+
+        MemberNode parentNode = findNotWholeNode(childTreeRoot == null ? root : childTreeRoot);
+        parentNode.addNode(node);
+        return parentNode;
+    }
+
+    public MemberNode addNode(MemberNode node, Long parentNodeId) {
+        if (parentNodeId == null) {
+            root = node;
+            return null;
+        }
+
+        MemberNode parentNode = getNode(parentNodeId);
         parentNode.addNode(node);
         return parentNode;
     }
@@ -49,7 +62,7 @@
      * 层级遍历,查到子节点未满3个的节点
      * @return
      */
-    public MemberNode findNotWholeNode() {
+    public MemberNode findNotWholeNode(MemberNode root) {
         ArrayDeque<MemberNode> deque = new ArrayDeque<>();
         deque.add(root);
 
@@ -77,6 +90,10 @@
         return result;
     }
 
+    public MemberNode findNotWholeNode() {
+        return findNotWholeNode(root);
+    }
+
     /**
      * 查找整个树下对应节点
      * @param param memberId/address/inviteId
@@ -85,6 +102,10 @@
     public MemberNode getNode(Object param) {
         if (root == null) {
             return null;
+        }
+
+        if (root.getMemberId().equals(param) || root.getPhone().equals(param) || root.getInviteId().equals(param)) {
+            return root;
         }
 
         return getNode(root.CHILD, param);
@@ -107,7 +128,10 @@
                 return node;
             }
 
-            return getNode(node.CHILD, param);
+            MemberNode childNode = getNode(node.CHILD, param);
+            if (childNode != null) {
+                return childNode;
+            }
         }
 
         return null;

--
Gitblit v1.9.1