diff --git a/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_node_reader.cpp b/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_node_reader.cpp
index c427ebe2d705e73266bbc7f0bc2a0fa17b2a15bb..2b4490701f42adea4d470fd7c76ddc10787ba7ef 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_node_reader.cpp
+++ b/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_node_reader.cpp
@@ -45,14 +45,10 @@ void DynamicPatriciaTrieNodeReader::fetchNodeInfoFromBufferAndProcessMovedNode(c
     } else {
         mProbability = NOT_A_PROBABILITY;
     }
-    if (hasChildren()) {
-        mChildrenPos = DynamicPatriciaTrieReadingUtils::readChildrenPositionAndAdvancePosition(
-                dictBuf, mFlags, &pos);
-        if (usesAdditionalBuffer && mChildrenPos != NOT_A_DICT_POS) {
-            mChildrenPos += mOriginalDictSize;
-        }
-    } else {
-        mChildrenPos = NOT_A_DICT_POS;
+    mChildrenPos = DynamicPatriciaTrieReadingUtils::readChildrenPositionAndAdvancePosition(
+            dictBuf, mFlags, &pos);
+    if (usesAdditionalBuffer && mChildrenPos != NOT_A_DICT_POS) {
+        mChildrenPos += mOriginalDictSize;
     }
     if (usesAdditionalBuffer) {
         pos += mOriginalDictSize;
diff --git a/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_node_reader.h b/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_node_reader.h
index 2a636289ebb89a0a63d388f7ceb17a03543a0188..8e7db35685b87a40076832e3e4330878760324d7 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_node_reader.h
+++ b/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_node_reader.h
@@ -71,7 +71,7 @@ class DynamicPatriciaTrieNodeReader {
     }
 
     AK_FORCE_INLINE bool hasChildren() const {
-        return PatriciaTrieReadingUtils::hasChildrenInFlags(mFlags);
+        return mChildrenPos != NOT_A_DICT_POS;
     }
 
     AK_FORCE_INLINE bool isTerminal() const {
diff --git a/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_reading_utils.cpp b/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_reading_utils.cpp
index 1ef3b65c3fc109dee019524532ade41f83b41e65..5d979fa51ae5338c33e169f38fc0e58e9fd54e5d 100644
--- a/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_reading_utils.cpp
+++ b/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_reading_utils.cpp
@@ -32,7 +32,13 @@ const DptReadingUtils::NodeFlags DptReadingUtils::FLAG_IS_DELETED = 0x80;
         const uint8_t *const buffer, const NodeFlags flags, int *const pos) {
     if ((flags & MASK_MOVED) == FLAG_IS_NOT_MOVED) {
         const int base = *pos;
-        return base + ByteArrayUtils::readSint24AndAdvancePosition(buffer, pos);
+        const int offset = ByteArrayUtils::readSint24AndAdvancePosition(buffer, pos);
+        if (offset == 0) {
+            // 0 offset means that the node does not have children.
+            return NOT_A_DICT_POS;
+        } else {
+            return base + offset;
+        }
     } else {
         return NOT_A_DICT_POS;
     }