Files
C-Plus-Plus/db/dbc/tree__234_8cpp_source.html
2025-08-15 04:42:14 +00:00

1070 lines
194 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- HTML header for doxygen 1.12.0-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>TheAlgorithms/C++: data_structures/tree_234.cpp Source File</title>
<link rel="icon" href="../../favicon.svg" type="image/x-icon" />
<link href="../../tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../jquery.js"></script>
<script type="text/javascript" src="../../dynsections.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/@xpack-3rd-party/doxygen-awesome-css@2.2.0-1/doxygen-awesome-darkmode-toggle.js"></script>
<script type="text/javascript">
DoxygenAwesomeDarkModeToggle.init()
</script>
<script type="text/javascript" src="../../clipboard.js"></script>
<link href="../../navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../navtreedata.js"></script>
<script type="text/javascript" src="../../navtree.js"></script>
<script type="text/javascript" src="../../cookie.js"></script>
<link href="../../search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="../../search/searchdata.js"></script>
<script type="text/javascript" src="../../search/search.js"></script>
<script type="text/javascript">
window.MathJax = {
options: {
ignoreHtmlClass: 'tex2jax_ignore',
processHtmlClass: 'tex2jax_process'
},
loader: {
load: ['[tex]/ams']
},
tex: {
macros: {},
packages: ['base','configmacros','ams']
}
};
</script>
<script type="text/javascript" id="MathJax-script" async="async" src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml.js"></script>
<link href="../../doxygen.css" rel="stylesheet" type="text/css" />
<link href="../../doxygen-awesome.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectlogo"><img alt="Logo" src="../../project_logo.png"/></td>
<td id="projectalign">
<div id="projectname">TheAlgorithms/C++<span id="projectnumber">&#160;1.0.0</span>
</div>
<div id="projectbrief">All the algorithms implemented in C++</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "../../search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="../../menudata.js"></script>
<script type="text/javascript" src="../../menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('../../',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('db/dbc/tree__234_8cpp_source.html','../../',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">tree_234.cpp</div></div>
</div><!--header-->
<div class="contents">
<a href="../../db/dbc/tree__234_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span></div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="preprocessor">#include &lt;array&gt;</span> </div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="preprocessor">#include &lt;cassert&gt;</span> </div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span><span class="preprocessor">#include &lt;fstream&gt;</span> </div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include &lt;iostream&gt;</span> </div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#include &lt;memory&gt;</span> </div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#include &lt;queue&gt;</span> </div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor">#include &lt;string&gt;</span> </div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span></div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="keyword">namespace </span><a class="code hl_namespace" href="../../d5/d3c/namespacedata__structures.html">data_structures</a> {</div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span><span class="keyword">namespace </span><a class="code hl_namespace" href="../../d6/dab/namespacetree__234.html">tree_234</a> {</div>
<div class="foldopen" id="foldopen00035" data-start="{" data-end="};">
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"><a class="line" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html"> 35</a></span><span class="keyword">class </span><a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad5219979ea9a8baa3a273a9ec0f0c670">Node</a> {</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen00041" data-start="{" data-end="}">
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"><a class="line" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad5219979ea9a8baa3a273a9ec0f0c670"> 41</a></span> <span class="keyword">explicit</span> <a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad5219979ea9a8baa3a273a9ec0f0c670">Node</a>(int64_t item)</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> : <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a8417d01c88b99ca56289843509fb71f9">items</a>({{item, 0, 0}}),</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad5d6b6ce5fab21ccc88c6bf3153eee5d">children</a>({{<span class="keyword">nullptr</span>, <span class="keyword">nullptr</span>, <span class="keyword">nullptr</span>, <span class="keyword">nullptr</span>}}),</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a934e6d53cfefae2b971e1241a8a4c921">count</a>(1) {}</div>
</div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span></div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"><a class="line" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#aac82e17daa088ede9ee00dc69c1e6f06"> 50</a></span> int8_t <a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#aac82e17daa088ede9ee00dc69c1e6f06">GetCount</a>() { <span class="keywordflow">return</span> <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a934e6d53cfefae2b971e1241a8a4c921">count</a>; }</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span></div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"><a class="line" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#af564fd4b0992fff69f90de201542d3d1"> 61</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#af564fd4b0992fff69f90de201542d3d1">SetCount</a>(int8_t c) { <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a934e6d53cfefae2b971e1241a8a4c921">count</a> = c; }</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span></div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"><a class="line" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a607d8201b00b142bf1d6a34df2f936e8"> 67</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a607d8201b00b142bf1d6a34df2f936e8">IsLeaf</a>() { <span class="keywordflow">return</span> <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad5d6b6ce5fab21ccc88c6bf3153eee5d">children</a>[0] == <span class="keyword">nullptr</span>; }</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span></div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"><a class="line" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a4a37381c0ef93d5ae2118b2e554974dd"> 73</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a4a37381c0ef93d5ae2118b2e554974dd">IsFull</a>() { <span class="keywordflow">return</span> <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a934e6d53cfefae2b971e1241a8a4c921">count</a> == 3; }</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span></div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"><a class="line" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#afd9f83e2d5d7f22f79c1348e98914631"> 79</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#afd9f83e2d5d7f22f79c1348e98914631">Is2Node</a>() { <span class="keywordflow">return</span> <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a934e6d53cfefae2b971e1241a8a4c921">count</a> == 1; }</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span></div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"><a class="line" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a6c5f929afcbad5219646990edee22e18"> 85</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a6c5f929afcbad5219646990edee22e18">Is34Node</a>() { <span class="keywordflow">return</span> <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a934e6d53cfefae2b971e1241a8a4c921">count</a> == 2 || <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a934e6d53cfefae2b971e1241a8a4c921">count</a> == 3; }</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span></div>
<div class="foldopen" id="foldopen00092" data-start="{" data-end="}">
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"><a class="line" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a22fd25c6c811c64b6b27b0850d8c532f"> 92</a></span> <span class="keywordtype">bool</span> <a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a22fd25c6c811c64b6b27b0850d8c532f">Contains</a>(int64_t item) {</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">for</span> (int8_t i = 0; i &lt; <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a934e6d53cfefae2b971e1241a8a4c921">count</a>; i++) {</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <span class="keywordflow">if</span> (item == <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a8417d01c88b99ca56289843509fb71f9">items</a>[i]) {</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> }</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> }</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> }</div>
</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span></div>
<div class="foldopen" id="foldopen00107" data-start="{" data-end="}">
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"><a class="line" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a650f0ef26b7450e1addb5d80bb0ed629"> 107</a></span> int8_t <a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a650f0ef26b7450e1addb5d80bb0ed629">GetItemIndex</a>(int64_t item) {</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="keywordflow">for</span> (int8_t i = 0; i &lt; <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a934e6d53cfefae2b971e1241a8a4c921">count</a>; i++) {</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a8417d01c88b99ca56289843509fb71f9">items</a>[i] == item) {</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">return</span> i;</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> }</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> }</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="keywordflow">return</span> -1;</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> }</div>
</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span></div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"><a class="line" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a2753b6053b8c86c5bd987a44fdfa0a57"> 120</a></span> int64_t <a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a2753b6053b8c86c5bd987a44fdfa0a57">GetMaxItem</a>() { <span class="keywordflow">return</span> <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a8417d01c88b99ca56289843509fb71f9">items</a>[<a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a934e6d53cfefae2b971e1241a8a4c921">count</a> - 1]; }</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span></div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"><a class="line" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a5438d0a47850f520b2262b5a42f75b71"> 126</a></span> int64_t <a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a5438d0a47850f520b2262b5a42f75b71">GetMinItem</a>() { <span class="keywordflow">return</span> <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a8417d01c88b99ca56289843509fb71f9">items</a>[0]; }</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span></div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"><a class="line" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a4808acb43668ff8cfd6f7cb44ceedad3"> 133</a></span> int64_t <a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a4808acb43668ff8cfd6f7cb44ceedad3">GetItem</a>(int8_t index) { <span class="keywordflow">return</span> <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a8417d01c88b99ca56289843509fb71f9">items</a>[index]; }</div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span></div>
<div class="foldopen" id="foldopen00140" data-start="{" data-end="}">
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"><a class="line" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#aaa89a3016b5dd1be3552321c34343cbc"> 140</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#aaa89a3016b5dd1be3552321c34343cbc">SetItem</a>(int8_t index, int64_t new_item) {</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> assert(index &gt;= 0 &amp;&amp; index &lt;= 2);</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> </div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a8417d01c88b99ca56289843509fb71f9">items</a>[index] = new_item;</div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> }</div>
</div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span></div>
<div class="foldopen" id="foldopen00163" data-start="{" data-end="}">
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"><a class="line" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a8e809ae85ae00e937f67ddb76951b6bb"> 163</a></span> <span class="keywordtype">int</span> <a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a8e809ae85ae00e937f67ddb76951b6bb">InsertItem</a>(<span class="keywordtype">int</span> item) {</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> assert(!<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a4a37381c0ef93d5ae2118b2e554974dd">IsFull</a>());</div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> </div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a22fd25c6c811c64b6b27b0850d8c532f">Contains</a>(item)) {</div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> <span class="keywordflow">return</span> -1;</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> }</div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> </div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> int8_t i = 0;</div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> <span class="keywordflow">for</span> (i = 0; i &lt; <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a934e6d53cfefae2b971e1241a8a4c921">count</a>; i++) {</div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a8417d01c88b99ca56289843509fb71f9">items</a>[i] &gt; item) {</div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> }</div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> }</div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> </div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a306a30931f54c84098b38d6bc8f4a956">InsertItemByIndex</a>(i, item, <span class="keyword">nullptr</span>, <span class="keyword">true</span>);</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <span class="keywordflow">return</span> i;</div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> }</div>
</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span></div>
<div class="foldopen" id="foldopen00189" data-start="{" data-end="}">
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"><a class="line" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a306a30931f54c84098b38d6bc8f4a956"> 189</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a306a30931f54c84098b38d6bc8f4a956">InsertItemByIndex</a>(int8_t index, int64_t item, <a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad5219979ea9a8baa3a273a9ec0f0c670">Node</a> *with_child,</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <span class="keywordtype">bool</span> to_left = <span class="keyword">true</span>) {</div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> assert(<a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a934e6d53cfefae2b971e1241a8a4c921">count &lt; 3 &amp;&amp; index &gt;</a>= 0 &amp;&amp; index &lt; 3);</div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> </div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> <span class="keywordflow">for</span> (int8_t i = <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a934e6d53cfefae2b971e1241a8a4c921">count</a> - 1; i &gt;= index; i--) {</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a8417d01c88b99ca56289843509fb71f9">items</a>[i + 1] = <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a8417d01c88b99ca56289843509fb71f9">items</a>[i];</div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> }</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> </div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a8417d01c88b99ca56289843509fb71f9">items</a>[index] = item;</div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> </div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> int8_t start_index = to_left ? index : index + 1;</div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> </div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">for</span> (int8_t i = <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a934e6d53cfefae2b971e1241a8a4c921">count</a>; i &gt;= start_index; i--) {</div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad5d6b6ce5fab21ccc88c6bf3153eee5d">children</a>[i + 1] = <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad5d6b6ce5fab21ccc88c6bf3153eee5d">children</a>[i];</div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> }</div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> </div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad5d6b6ce5fab21ccc88c6bf3153eee5d">children</a>[start_index] = with_child;</div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> </div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a934e6d53cfefae2b971e1241a8a4c921">count</a>++;</div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> }</div>
</div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span></div>
<div class="foldopen" id="foldopen00217" data-start="{" data-end="}">
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"><a class="line" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a28944bb16ec22650b47fe3e80e3e13f8"> 217</a></span> <a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad5219979ea9a8baa3a273a9ec0f0c670">Node</a> *<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a28944bb16ec22650b47fe3e80e3e13f8">RemoveItemByIndex</a>(int8_t index, <span class="keywordtype">bool</span> keep_left) {</div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> assert(index &gt;= 0 &amp;&amp; index &lt; <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a934e6d53cfefae2b971e1241a8a4c921">count</a>);</div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad5219979ea9a8baa3a273a9ec0f0c670">Node</a> *removed_child = keep_left ? <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad5d6b6ce5fab21ccc88c6bf3153eee5d">children</a>[index + 1] : <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad5d6b6ce5fab21ccc88c6bf3153eee5d">children</a>[index];</div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> <span class="keywordflow">for</span> (int8_t i = index; i &lt; <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a934e6d53cfefae2b971e1241a8a4c921">count</a> - 1; i++) {</div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a8417d01c88b99ca56289843509fb71f9">items</a>[i] = <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a8417d01c88b99ca56289843509fb71f9">items</a>[i + 1];</div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> }</div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> </div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> <span class="keywordflow">for</span> (int8_t i = keep_left ? index + 1 : index; i &lt; <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a934e6d53cfefae2b971e1241a8a4c921">count</a>; i++) {</div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad5d6b6ce5fab21ccc88c6bf3153eee5d">children</a>[i] = <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad5d6b6ce5fab21ccc88c6bf3153eee5d">children</a>[i + 1];</div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> }</div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> </div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a934e6d53cfefae2b971e1241a8a4c921">count</a>--;</div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> <span class="keywordflow">return</span> removed_child;</div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> }</div>
</div>
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span></div>
<div class="foldopen" id="foldopen00237" data-start="{" data-end="}">
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"><a class="line" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad632a0440295bc88ceadae7478fe0d37"> 237</a></span> int8_t <a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad632a0440295bc88ceadae7478fe0d37">GetChildIndex</a>(<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad5219979ea9a8baa3a273a9ec0f0c670">Node</a> *child) {</div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> <span class="keywordflow">for</span> (int8_t i = 0; i &lt; <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a934e6d53cfefae2b971e1241a8a4c921">count</a> + 1; i++) {</div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad5d6b6ce5fab21ccc88c6bf3153eee5d">children</a>[i] == child) {</div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> <span class="keywordflow">return</span> i;</div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> }</div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> }</div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> </div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> <span class="keywordflow">return</span> -1;</div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> }</div>
</div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span></div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"><a class="line" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a164574a9209b5df66368530d090b32c4"> 252</a></span> <a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad5219979ea9a8baa3a273a9ec0f0c670">Node</a> *<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a164574a9209b5df66368530d090b32c4">GetChild</a>(int8_t index) { <span class="keywordflow">return</span> <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad5d6b6ce5fab21ccc88c6bf3153eee5d">children</a>[index]; }</div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span></div>
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"><a class="line" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ab4e5f7b7b260bb81d9441652cc124c74"> 259</a></span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ab4e5f7b7b260bb81d9441652cc124c74">SetChild</a>(int8_t index, <a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad5219979ea9a8baa3a273a9ec0f0c670">Node</a> *child) { <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad5d6b6ce5fab21ccc88c6bf3153eee5d">children</a>[index] = child; }</div>
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span></div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"><a class="line" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a731f9ae385840cf0a06d55e7f9924a94"> 265</a></span> <a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad5219979ea9a8baa3a273a9ec0f0c670">Node</a> *<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a731f9ae385840cf0a06d55e7f9924a94">GetRightmostChild</a>() { <span class="keywordflow">return</span> <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad5d6b6ce5fab21ccc88c6bf3153eee5d">children</a>[<a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a934e6d53cfefae2b971e1241a8a4c921">count</a>]; }</div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span></div>
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"><a class="line" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ac6f619a1605cb46196360889fff4529e"> 271</a></span> <a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad5219979ea9a8baa3a273a9ec0f0c670">Node</a> *<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ac6f619a1605cb46196360889fff4529e">GetLeftmostChild</a>() { <span class="keywordflow">return</span> <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad5d6b6ce5fab21ccc88c6bf3153eee5d">children</a>[0]; }</div>
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span></div>
<div class="foldopen" id="foldopen00278" data-start="{" data-end="}">
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"><a class="line" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ab654d7376d3449fdc78edab0e7fed06e"> 278</a></span> <a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad5219979ea9a8baa3a273a9ec0f0c670">Node</a> *<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ab654d7376d3449fdc78edab0e7fed06e">GetItemLeftChild</a>(int8_t item_index) {</div>
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> <span class="keywordflow">if</span> (item_index &lt; 0 || item_index &gt; <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a934e6d53cfefae2b971e1241a8a4c921">count</a> - 1) {</div>
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> }</div>
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> </div>
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad5d6b6ce5fab21ccc88c6bf3153eee5d">children</a>[item_index];</div>
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> }</div>
</div>
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span></div>
<div class="foldopen" id="foldopen00291" data-start="{" data-end="}">
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"><a class="line" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a441cbee9896391f2b167d5aa7b4f8c95"> 291</a></span> <a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad5219979ea9a8baa3a273a9ec0f0c670">Node</a> *<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a441cbee9896391f2b167d5aa7b4f8c95">GetItemRightChild</a>(int8_t item_index) {</div>
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> <span class="keywordflow">if</span> (item_index &lt; 0 || item_index &gt; <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a934e6d53cfefae2b971e1241a8a4c921">count</a> - 1) {</div>
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> }</div>
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> </div>
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad5d6b6ce5fab21ccc88c6bf3153eee5d">children</a>[item_index + 1];</div>
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> }</div>
</div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span></div>
<div class="foldopen" id="foldopen00304" data-start="{" data-end="}">
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"><a class="line" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a91322b3bb0b2b2175eb56e9e10d7db46"> 304</a></span> <a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad5219979ea9a8baa3a273a9ec0f0c670">Node</a> *<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a91322b3bb0b2b2175eb56e9e10d7db46">GetNextPossibleChild</a>(int64_t item) {</div>
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> <span class="keywordtype">int</span> i = 0;</div>
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> <span class="keywordflow">for</span> (i = 0; i &lt; <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a934e6d53cfefae2b971e1241a8a4c921">count</a>; i++) {</div>
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a8417d01c88b99ca56289843509fb71f9">items</a>[i] &gt; item) {</div>
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> }</div>
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> }</div>
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad5d6b6ce5fab21ccc88c6bf3153eee5d">children</a>[i];</div>
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> }</div>
</div>
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> </div>
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"><a class="line" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a8417d01c88b99ca56289843509fb71f9"> 315</a></span> std::array&lt;int64_t, 3&gt; <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a8417d01c88b99ca56289843509fb71f9">items</a>; </div>
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> </div>
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"><a class="line" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad5d6b6ce5fab21ccc88c6bf3153eee5d"> 317</a></span> std::array&lt;Node *, 4&gt; <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad5d6b6ce5fab21ccc88c6bf3153eee5d">children</a>; </div>
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> </div>
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"><a class="line" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a934e6d53cfefae2b971e1241a8a4c921"> 319</a></span> int8_t <a class="code hl_variable" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a934e6d53cfefae2b971e1241a8a4c921">count</a> = 0; </div>
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span>};</div>
</div>
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span></div>
<div class="foldopen" id="foldopen00323" data-start="{" data-end="};">
<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"><a class="line" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html"> 323</a></span><span class="keyword">class </span>Tree234 {</div>
<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> Tree234() = <span class="keywordflow">default</span>;</div>
<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> Tree234(<span class="keyword">const</span> Tree234 &amp;) = <span class="keyword">delete</span>;</div>
<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> Tree234(<span class="keyword">const</span> Tree234 &amp;&amp;) = <span class="keyword">delete</span>;</div>
<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> Tree234 &amp;operator=(<span class="keyword">const</span> Tree234 &amp;) = <span class="keyword">delete</span>;</div>
<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span> Tree234 &amp;operator=(<span class="keyword">const</span> Tree234 &amp;&amp;) = <span class="keyword">delete</span>;</div>
<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> </div>
<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> ~Tree234();</div>
<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span></div>
<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a6749ebb40710c9752a2771eda03c6b3e">Insert</a>(int64_t item);</div>
<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span></div>
<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a5da1be3f5b5d967ebb36a201f3ebad11">Remove</a>(int64_t item);</div>
<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span></div>
<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a84ab7b4fe7442b5e2eeed8c050bb86bd">Traverse</a>();</div>
<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span></div>
<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a2e9a9db7792cf5383f4c4cc418255165">Print</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *file_name = <span class="keyword">nullptr</span>);</div>
<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> </div>
<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> <span class="keyword">private</span>:</div>
<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a07811b3c564a3a443b106c9aa717629d">InsertPreSplit</a>(int64_t item);</div>
<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span></div>
<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#aa7e5e00033f38006a224f30bdbf3f703">InsertPostMerge</a>(int64_t item);</div>
<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span></div>
<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span> <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *<a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a6749ebb40710c9752a2771eda03c6b3e">Insert</a>(<a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *tree, int64_t item);</div>
<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span></div>
<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span> <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *<a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a11f0d016dff7f7e62b3dddb9fdf47805">MergeNode</a>(<a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *dst_node, <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>);</div>
<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span></div>
<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#ad37e29e2a4a6cc0eb65cbd5595e1da95">MergeNodeNotFull</a>(<a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *dst_node, <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>);</div>
<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span></div>
<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span> <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *<a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a370b625ca9f16bbef2b65e024ef78ea9">SplitNode</a>(<a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>);</div>
<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span></div>
<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> int64_t <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#ac85ba5abfd6d34dcd908b2afe6464657">GetTreeMaxItem</a>(<a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *tree);</div>
<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span></div>
<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span> int64_t <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a65a1235659356166a3e9b451c64fcc36">GetTreeMinItem</a>(<a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *tree);</div>
<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span></div>
<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#ac5361479dd996eb331759f33808657d9">TryLeftRotate</a>(<a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *parent, <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *to_child);</div>
<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span></div>
<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#aec0642d1d151521ca7c70ea85cdb15d3">TryRightRotate</a>(<a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *parent, <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *to_child);</div>
<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span></div>
<div class="line"><a id="l00472" name="l00472"></a><span class="lineno"> 472</span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#ae68f8e62be02657c1287def6b38d7cc9">RightRotate</a>(<a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *parent, int8_t index);</div>
<div class="line"><a id="l00473" name="l00473"></a><span class="lineno"> 473</span></div>
<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#ae58dca20f08eaf9313f6e7b0869c2d0e">LeftRotate</a>(<a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *parent, int8_t index);</div>
<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span></div>
<div class="line"><a id="l00493" name="l00493"></a><span class="lineno"> 493</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a61dd051a74e5f36c8dc03dae8dca6ef4">RemovePreMerge</a>(<a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>, int64_t item);</div>
<div class="line"><a id="l00494" name="l00494"></a><span class="lineno"> 494</span></div>
<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"> 508</span> <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *<a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a36f4d5f603f7edb7db7c73fb53ba14e9">Merge</a>(<a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *parent, int8_t index);</div>
<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"> 509</span></div>
<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a273511e84a5243ffffe81be28bd24855">DeleteNode</a>(<a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *tree);</div>
<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span></div>
<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"> 520</span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a84ab7b4fe7442b5e2eeed8c050bb86bd">Traverse</a>(<a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *tree);</div>
<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span></div>
<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"> 535</span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#af260f0760344771bf8fce4fc9b1739be">PrintNode</a>(std::ofstream &amp;ofs, <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>, int64_t parent_index,</div>
<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span> int64_t index, int8_t parent_child_index);</div>
<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span> </div>
<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"><a class="line" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a348ea76c7629b2dcf740be062f970a36"> 538</a></span> <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *<a class="code hl_variable" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a348ea76c7629b2dcf740be062f970a36">root_</a>{<span class="keyword">nullptr</span>}; </div>
<div class="line"><a id="l00539" name="l00539"></a><span class="lineno"> 539</span>};</div>
</div>
<div class="line"><a id="l00540" name="l00540"></a><span class="lineno"> 540</span> </div>
<div class="line"><a id="l00541" name="l00541"></a><span class="lineno"> 541</span>Tree234::~Tree234() { <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a273511e84a5243ffffe81be28bd24855">DeleteNode</a>(<a class="code hl_variable" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a348ea76c7629b2dcf740be062f970a36">root_</a>); }</div>
<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span></div>
<div class="foldopen" id="foldopen00547" data-start="{" data-end="}">
<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"><a class="line" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a273511e84a5243ffffe81be28bd24855"> 547</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a273511e84a5243ffffe81be28bd24855">Tree234::DeleteNode</a>(<a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *tree) {</div>
<div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span> <span class="keywordflow">if</span> (!tree) {</div>
<div class="line"><a id="l00549" name="l00549"></a><span class="lineno"> 549</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00550" name="l00550"></a><span class="lineno"> 550</span> }</div>
<div class="line"><a id="l00551" name="l00551"></a><span class="lineno"> 551</span> <span class="keywordflow">for</span> (int8_t i = 0; i &lt;= tree-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#aac82e17daa088ede9ee00dc69c1e6f06">GetCount</a>(); i++) {</div>
<div class="line"><a id="l00552" name="l00552"></a><span class="lineno"> 552</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a273511e84a5243ffffe81be28bd24855">DeleteNode</a>(tree-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a164574a9209b5df66368530d090b32c4">GetChild</a>(i));</div>
<div class="line"><a id="l00553" name="l00553"></a><span class="lineno"> 553</span> }</div>
<div class="line"><a id="l00554" name="l00554"></a><span class="lineno"> 554</span> </div>
<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"> 555</span> <span class="keyword">delete</span> tree;</div>
<div class="line"><a id="l00556" name="l00556"></a><span class="lineno"> 556</span>}</div>
</div>
<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"> 557</span></div>
<div class="foldopen" id="foldopen00562" data-start="{" data-end="}">
<div class="line"><a id="l00562" name="l00562"></a><span class="lineno"><a class="line" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a84ab7b4fe7442b5e2eeed8c050bb86bd"> 562</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a84ab7b4fe7442b5e2eeed8c050bb86bd">Tree234::Traverse</a>() {</div>
<div class="line"><a id="l00563" name="l00563"></a><span class="lineno"> 563</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a84ab7b4fe7442b5e2eeed8c050bb86bd">Traverse</a>(<a class="code hl_variable" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a348ea76c7629b2dcf740be062f970a36">root_</a>);</div>
<div class="line"><a id="l00564" name="l00564"></a><span class="lineno"> 564</span> std::cout &lt;&lt; std::endl;</div>
<div class="line"><a id="l00565" name="l00565"></a><span class="lineno"> 565</span>}</div>
</div>
<div class="line"><a id="l00566" name="l00566"></a><span class="lineno"> 566</span> </div>
<div class="foldopen" id="foldopen00567" data-start="{" data-end="}">
<div class="line"><a id="l00567" name="l00567"></a><span class="lineno"><a class="line" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a936bb546e6a94d8b9d35b30ee1bb291a"> 567</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a84ab7b4fe7442b5e2eeed8c050bb86bd">Tree234::Traverse</a>(<a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>) {</div>
<div class="line"><a id="l00568" name="l00568"></a><span class="lineno"> 568</span> <span class="keywordflow">if</span> (!<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>) {</div>
<div class="line"><a id="l00569" name="l00569"></a><span class="lineno"> 569</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00570" name="l00570"></a><span class="lineno"> 570</span> }</div>
<div class="line"><a id="l00571" name="l00571"></a><span class="lineno"> 571</span> </div>
<div class="line"><a id="l00572" name="l00572"></a><span class="lineno"> 572</span> int8_t i = 0;</div>
<div class="line"><a id="l00573" name="l00573"></a><span class="lineno"> 573</span> <span class="keywordflow">for</span> (i = 0; i &lt; <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;GetCount(); i++) {</div>
<div class="line"><a id="l00574" name="l00574"></a><span class="lineno"> 574</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a84ab7b4fe7442b5e2eeed8c050bb86bd">Traverse</a>(<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;GetChild(i));</div>
<div class="line"><a id="l00575" name="l00575"></a><span class="lineno"> 575</span> std::cout &lt;&lt; <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;GetItem(i) &lt;&lt; <span class="stringliteral">&quot;, &quot;</span>;</div>
<div class="line"><a id="l00576" name="l00576"></a><span class="lineno"> 576</span> }</div>
<div class="line"><a id="l00577" name="l00577"></a><span class="lineno"> 577</span> </div>
<div class="line"><a id="l00578" name="l00578"></a><span class="lineno"> 578</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a84ab7b4fe7442b5e2eeed8c050bb86bd">Traverse</a>(<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;GetChild(i));</div>
<div class="line"><a id="l00579" name="l00579"></a><span class="lineno"> 579</span>}</div>
</div>
<div class="line"><a id="l00580" name="l00580"></a><span class="lineno"> 580</span></div>
<div class="foldopen" id="foldopen00585" data-start="{" data-end="}">
<div class="line"><a id="l00585" name="l00585"></a><span class="lineno"><a class="line" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a07811b3c564a3a443b106c9aa717629d"> 585</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a07811b3c564a3a443b106c9aa717629d">Tree234::InsertPreSplit</a>(int64_t item) {</div>
<div class="line"><a id="l00586" name="l00586"></a><span class="lineno"> 586</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a348ea76c7629b2dcf740be062f970a36">root_</a>) {</div>
<div class="line"><a id="l00587" name="l00587"></a><span class="lineno"> 587</span> <a class="code hl_variable" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a348ea76c7629b2dcf740be062f970a36">root_</a> = <span class="keyword">new</span> <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a>(item);</div>
<div class="line"><a id="l00588" name="l00588"></a><span class="lineno"> 588</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00589" name="l00589"></a><span class="lineno"> 589</span> }</div>
<div class="line"><a id="l00590" name="l00590"></a><span class="lineno"> 590</span> </div>
<div class="line"><a id="l00591" name="l00591"></a><span class="lineno"> 591</span> <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *parent = <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00592" name="l00592"></a><span class="lineno"> 592</span> <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *<a class="code hl_class" href="../../d5/da1/structnode.html">node</a> = <a class="code hl_variable" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a348ea76c7629b2dcf740be062f970a36">root_</a>;</div>
<div class="line"><a id="l00593" name="l00593"></a><span class="lineno"> 593</span> </div>
<div class="line"><a id="l00594" name="l00594"></a><span class="lineno"> 594</span> <span class="keywordflow">while</span> (<span class="keyword">true</span>) {</div>
<div class="line"><a id="l00595" name="l00595"></a><span class="lineno"> 595</span> <span class="keywordflow">if</span> (!<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>) {</div>
<div class="line"><a id="l00596" name="l00596"></a><span class="lineno"> 596</span> std::unique_ptr&lt;Node&gt; tmp(<span class="keyword">new</span> <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a>(item));</div>
<div class="line"><a id="l00597" name="l00597"></a><span class="lineno"> 597</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#ad37e29e2a4a6cc0eb65cbd5595e1da95">MergeNodeNotFull</a>(parent, tmp.get());</div>
<div class="line"><a id="l00598" name="l00598"></a><span class="lineno"> 598</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00599" name="l00599"></a><span class="lineno"> 599</span> }</div>
<div class="line"><a id="l00600" name="l00600"></a><span class="lineno"> 600</span> </div>
<div class="line"><a id="l00601" name="l00601"></a><span class="lineno"> 601</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;Contains(item)) {</div>
<div class="line"><a id="l00602" name="l00602"></a><span class="lineno"> 602</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00603" name="l00603"></a><span class="lineno"> 603</span> }</div>
<div class="line"><a id="l00604" name="l00604"></a><span class="lineno"> 604</span> </div>
<div class="line"><a id="l00605" name="l00605"></a><span class="lineno"> 605</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;IsFull()) {</div>
<div class="line"><a id="l00606" name="l00606"></a><span class="lineno"> 606</span> <a class="code hl_class" href="../../d5/da1/structnode.html">node</a> = <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a370b625ca9f16bbef2b65e024ef78ea9">SplitNode</a>(<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>);</div>
<div class="line"><a id="l00607" name="l00607"></a><span class="lineno"> 607</span> </div>
<div class="line"><a id="l00608" name="l00608"></a><span class="lineno"> 608</span> <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *cur_node = <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00609" name="l00609"></a><span class="lineno"> 609</span> </div>
<div class="line"><a id="l00610" name="l00610"></a><span class="lineno"> 610</span> <span class="keywordflow">if</span> (item &lt; node-&gt;GetItem(0)) {</div>
<div class="line"><a id="l00611" name="l00611"></a><span class="lineno"> 611</span> cur_node = <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;GetChild(0);</div>
<div class="line"><a id="l00612" name="l00612"></a><span class="lineno"> 612</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00613" name="l00613"></a><span class="lineno"> 613</span> cur_node = <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;GetChild(1);</div>
<div class="line"><a id="l00614" name="l00614"></a><span class="lineno"> 614</span> }</div>
<div class="line"><a id="l00615" name="l00615"></a><span class="lineno"> 615</span> </div>
<div class="line"><a id="l00616" name="l00616"></a><span class="lineno"> 616</span> <span class="keywordflow">if</span> (!parent) {</div>
<div class="line"><a id="l00617" name="l00617"></a><span class="lineno"> 617</span> <span class="comment">// for the root node parent is nullptr, we simply assign the</span></div>
<div class="line"><a id="l00618" name="l00618"></a><span class="lineno"> 618</span> <span class="comment">// split parent to root_</span></div>
<div class="line"><a id="l00619" name="l00619"></a><span class="lineno"> 619</span> <a class="code hl_variable" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a348ea76c7629b2dcf740be062f970a36">root_</a> = <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>;</div>
<div class="line"><a id="l00620" name="l00620"></a><span class="lineno"> 620</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00621" name="l00621"></a><span class="lineno"> 621</span> <span class="comment">// merge the split parent to its origin parent</span></div>
<div class="line"><a id="l00622" name="l00622"></a><span class="lineno"> 622</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#ad37e29e2a4a6cc0eb65cbd5595e1da95">MergeNodeNotFull</a>(parent, <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>);</div>
<div class="line"><a id="l00623" name="l00623"></a><span class="lineno"> 623</span> }</div>
<div class="line"><a id="l00624" name="l00624"></a><span class="lineno"> 624</span> </div>
<div class="line"><a id="l00625" name="l00625"></a><span class="lineno"> 625</span> <a class="code hl_class" href="../../d5/da1/structnode.html">node</a> = cur_node;</div>
<div class="line"><a id="l00626" name="l00626"></a><span class="lineno"> 626</span> }</div>
<div class="line"><a id="l00627" name="l00627"></a><span class="lineno"> 627</span> </div>
<div class="line"><a id="l00628" name="l00628"></a><span class="lineno"> 628</span> parent = <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>;</div>
<div class="line"><a id="l00629" name="l00629"></a><span class="lineno"> 629</span> <a class="code hl_class" href="../../d5/da1/structnode.html">node</a> = parent-&gt;GetNextPossibleChild(item);</div>
<div class="line"><a id="l00630" name="l00630"></a><span class="lineno"> 630</span> }</div>
<div class="line"><a id="l00631" name="l00631"></a><span class="lineno"> 631</span>}</div>
</div>
<div class="line"><a id="l00632" name="l00632"></a><span class="lineno"> 632</span></div>
<div class="foldopen" id="foldopen00637" data-start="{" data-end="}">
<div class="line"><a id="l00637" name="l00637"></a><span class="lineno"><a class="line" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#aa7e5e00033f38006a224f30bdbf3f703"> 637</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#aa7e5e00033f38006a224f30bdbf3f703">Tree234::InsertPostMerge</a>(int64_t item) {</div>
<div class="line"><a id="l00638" name="l00638"></a><span class="lineno"> 638</span> <span class="keywordflow">if</span> (!<a class="code hl_variable" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a348ea76c7629b2dcf740be062f970a36">root_</a>) {</div>
<div class="line"><a id="l00639" name="l00639"></a><span class="lineno"> 639</span> <a class="code hl_variable" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a348ea76c7629b2dcf740be062f970a36">root_</a> = <span class="keyword">new</span> <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a>(item);</div>
<div class="line"><a id="l00640" name="l00640"></a><span class="lineno"> 640</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00641" name="l00641"></a><span class="lineno"> 641</span> }</div>
<div class="line"><a id="l00642" name="l00642"></a><span class="lineno"> 642</span> </div>
<div class="line"><a id="l00643" name="l00643"></a><span class="lineno"> 643</span> <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *split_node = <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a6749ebb40710c9752a2771eda03c6b3e">Insert</a>(<a class="code hl_variable" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a348ea76c7629b2dcf740be062f970a36">root_</a>, item);</div>
<div class="line"><a id="l00644" name="l00644"></a><span class="lineno"> 644</span> </div>
<div class="line"><a id="l00645" name="l00645"></a><span class="lineno"> 645</span> <span class="comment">// if root has split, then update root_</span></div>
<div class="line"><a id="l00646" name="l00646"></a><span class="lineno"> 646</span> <span class="keywordflow">if</span> (split_node) {</div>
<div class="line"><a id="l00647" name="l00647"></a><span class="lineno"> 647</span> <a class="code hl_variable" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a348ea76c7629b2dcf740be062f970a36">root_</a> = split_node;</div>
<div class="line"><a id="l00648" name="l00648"></a><span class="lineno"> 648</span> }</div>
<div class="line"><a id="l00649" name="l00649"></a><span class="lineno"> 649</span>}</div>
</div>
<div class="line"><a id="l00650" name="l00650"></a><span class="lineno"> 650</span></div>
<div class="line"><a id="l00655" name="l00655"></a><span class="lineno"><a class="line" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a6749ebb40710c9752a2771eda03c6b3e"> 655</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a6749ebb40710c9752a2771eda03c6b3e">Tree234::Insert</a>(int64_t item) { <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a07811b3c564a3a443b106c9aa717629d">InsertPreSplit</a>(item); }</div>
<div class="line"><a id="l00656" name="l00656"></a><span class="lineno"> 656</span></div>
<div class="foldopen" id="foldopen00663" data-start="{" data-end="}">
<div class="line"><a id="l00663" name="l00663"></a><span class="lineno"><a class="line" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a02df91964915ca97609d35f847faff5f"> 663</a></span><a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *<a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a6749ebb40710c9752a2771eda03c6b3e">Tree234::Insert</a>(<a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *tree, int64_t item) {</div>
<div class="line"><a id="l00664" name="l00664"></a><span class="lineno"> 664</span> assert(tree != <span class="keyword">nullptr</span>);</div>
<div class="line"><a id="l00665" name="l00665"></a><span class="lineno"> 665</span> </div>
<div class="line"><a id="l00666" name="l00666"></a><span class="lineno"> 666</span> std::unique_ptr&lt;Node&gt; split_node;</div>
<div class="line"><a id="l00667" name="l00667"></a><span class="lineno"> 667</span> </div>
<div class="line"><a id="l00668" name="l00668"></a><span class="lineno"> 668</span> <span class="keywordflow">if</span> (tree-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a22fd25c6c811c64b6b27b0850d8c532f">Contains</a>(item)) {</div>
<div class="line"><a id="l00669" name="l00669"></a><span class="lineno"> 669</span> <span class="comment">// return nullptr indicate current node not overflow</span></div>
<div class="line"><a id="l00670" name="l00670"></a><span class="lineno"> 670</span> <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00671" name="l00671"></a><span class="lineno"> 671</span> }</div>
<div class="line"><a id="l00672" name="l00672"></a><span class="lineno"> 672</span> </div>
<div class="line"><a id="l00673" name="l00673"></a><span class="lineno"> 673</span> <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *next_node = tree-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a91322b3bb0b2b2175eb56e9e10d7db46">GetNextPossibleChild</a>(item);</div>
<div class="line"><a id="l00674" name="l00674"></a><span class="lineno"> 674</span> <span class="keywordflow">if</span> (next_node) {</div>
<div class="line"><a id="l00675" name="l00675"></a><span class="lineno"> 675</span> split_node.reset(<a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a6749ebb40710c9752a2771eda03c6b3e">Insert</a>(next_node, item));</div>
<div class="line"><a id="l00676" name="l00676"></a><span class="lineno"> 676</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00677" name="l00677"></a><span class="lineno"> 677</span> split_node.reset(<span class="keyword">new</span> <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a>(item));</div>
<div class="line"><a id="l00678" name="l00678"></a><span class="lineno"> 678</span> }</div>
<div class="line"><a id="l00679" name="l00679"></a><span class="lineno"> 679</span> </div>
<div class="line"><a id="l00680" name="l00680"></a><span class="lineno"> 680</span> <span class="keywordflow">if</span> (split_node) {</div>
<div class="line"><a id="l00681" name="l00681"></a><span class="lineno"> 681</span> <span class="keywordflow">return</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a11f0d016dff7f7e62b3dddb9fdf47805">MergeNode</a>(tree, split_node.get());</div>
<div class="line"><a id="l00682" name="l00682"></a><span class="lineno"> 682</span> }</div>
<div class="line"><a id="l00683" name="l00683"></a><span class="lineno"> 683</span> </div>
<div class="line"><a id="l00684" name="l00684"></a><span class="lineno"> 684</span> <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00685" name="l00685"></a><span class="lineno"> 685</span>}</div>
</div>
<div class="line"><a id="l00686" name="l00686"></a><span class="lineno"> 686</span></div>
<div class="foldopen" id="foldopen00700" data-start="{" data-end="}">
<div class="line"><a id="l00700" name="l00700"></a><span class="lineno"><a class="line" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a11f0d016dff7f7e62b3dddb9fdf47805"> 700</a></span><a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *<a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a11f0d016dff7f7e62b3dddb9fdf47805">Tree234::MergeNode</a>(<a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *dst_node, <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>) {</div>
<div class="line"><a id="l00701" name="l00701"></a><span class="lineno"> 701</span> assert(dst_node != <span class="keyword">nullptr</span> &amp;&amp; <a class="code hl_class" href="../../d5/da1/structnode.html">node</a> != <span class="keyword">nullptr</span>);</div>
<div class="line"><a id="l00702" name="l00702"></a><span class="lineno"> 702</span> </div>
<div class="line"><a id="l00703" name="l00703"></a><span class="lineno"> 703</span> <span class="keywordflow">if</span> (!dst_node-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a4a37381c0ef93d5ae2118b2e554974dd">IsFull</a>()) {</div>
<div class="line"><a id="l00704" name="l00704"></a><span class="lineno"> 704</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#ad37e29e2a4a6cc0eb65cbd5595e1da95">MergeNodeNotFull</a>(dst_node, <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>);</div>
<div class="line"><a id="l00705" name="l00705"></a><span class="lineno"> 705</span> <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00706" name="l00706"></a><span class="lineno"> 706</span> }</div>
<div class="line"><a id="l00707" name="l00707"></a><span class="lineno"> 707</span> </div>
<div class="line"><a id="l00708" name="l00708"></a><span class="lineno"> 708</span> dst_node = <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a370b625ca9f16bbef2b65e024ef78ea9">SplitNode</a>(dst_node);</div>
<div class="line"><a id="l00709" name="l00709"></a><span class="lineno"> 709</span> </div>
<div class="line"><a id="l00710" name="l00710"></a><span class="lineno"> 710</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;GetItem(0) &lt; dst_node-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a4808acb43668ff8cfd6f7cb44ceedad3">GetItem</a>(0)) {</div>
<div class="line"><a id="l00711" name="l00711"></a><span class="lineno"> 711</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#ad37e29e2a4a6cc0eb65cbd5595e1da95">MergeNodeNotFull</a>(dst_node-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a164574a9209b5df66368530d090b32c4">GetChild</a>(0), <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>);</div>
<div class="line"><a id="l00712" name="l00712"></a><span class="lineno"> 712</span> </div>
<div class="line"><a id="l00713" name="l00713"></a><span class="lineno"> 713</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00714" name="l00714"></a><span class="lineno"> 714</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#ad37e29e2a4a6cc0eb65cbd5595e1da95">MergeNodeNotFull</a>(dst_node-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a164574a9209b5df66368530d090b32c4">GetChild</a>(1), <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>);</div>
<div class="line"><a id="l00715" name="l00715"></a><span class="lineno"> 715</span> }</div>
<div class="line"><a id="l00716" name="l00716"></a><span class="lineno"> 716</span> </div>
<div class="line"><a id="l00717" name="l00717"></a><span class="lineno"> 717</span> <span class="keywordflow">return</span> dst_node;</div>
<div class="line"><a id="l00718" name="l00718"></a><span class="lineno"> 718</span>}</div>
</div>
<div class="line"><a id="l00719" name="l00719"></a><span class="lineno"> 719</span></div>
<div class="foldopen" id="foldopen00730" data-start="{" data-end="}">
<div class="line"><a id="l00730" name="l00730"></a><span class="lineno"><a class="line" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#ad37e29e2a4a6cc0eb65cbd5595e1da95"> 730</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#ad37e29e2a4a6cc0eb65cbd5595e1da95">Tree234::MergeNodeNotFull</a>(<a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *dst_node, <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>) {</div>
<div class="line"><a id="l00731" name="l00731"></a><span class="lineno"> 731</span> assert(dst_node &amp;&amp; <a class="code hl_class" href="../../d5/da1/structnode.html">node</a> &amp;&amp; !dst_node-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a4a37381c0ef93d5ae2118b2e554974dd">IsFull</a>() &amp;&amp; <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;Is2Node());</div>
<div class="line"><a id="l00732" name="l00732"></a><span class="lineno"> 732</span> </div>
<div class="line"><a id="l00733" name="l00733"></a><span class="lineno"> 733</span> int8_t i = dst_node-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a8e809ae85ae00e937f67ddb76951b6bb">InsertItem</a>(<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;GetItem(0));</div>
<div class="line"><a id="l00734" name="l00734"></a><span class="lineno"> 734</span> </div>
<div class="line"><a id="l00735" name="l00735"></a><span class="lineno"> 735</span> dst_node-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ab4e5f7b7b260bb81d9441652cc124c74">SetChild</a>(i, <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;GetChild(0));</div>
<div class="line"><a id="l00736" name="l00736"></a><span class="lineno"> 736</span> dst_node-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ab4e5f7b7b260bb81d9441652cc124c74">SetChild</a>(i + 1, <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;GetChild(1));</div>
<div class="line"><a id="l00737" name="l00737"></a><span class="lineno"> 737</span>}</div>
</div>
<div class="line"><a id="l00738" name="l00738"></a><span class="lineno"> 738</span></div>
<div class="foldopen" id="foldopen00745" data-start="{" data-end="}">
<div class="line"><a id="l00745" name="l00745"></a><span class="lineno"><a class="line" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a370b625ca9f16bbef2b65e024ef78ea9"> 745</a></span><a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *<a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a370b625ca9f16bbef2b65e024ef78ea9">Tree234::SplitNode</a>(<a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>) {</div>
<div class="line"><a id="l00746" name="l00746"></a><span class="lineno"> 746</span> assert(<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;GetCount() == 3);</div>
<div class="line"><a id="l00747" name="l00747"></a><span class="lineno"> 747</span> </div>
<div class="line"><a id="l00748" name="l00748"></a><span class="lineno"> 748</span> <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *left = <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>;</div>
<div class="line"><a id="l00749" name="l00749"></a><span class="lineno"> 749</span> </div>
<div class="line"><a id="l00750" name="l00750"></a><span class="lineno"> 750</span> <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *right = <span class="keyword">new</span> <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a>(<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;GetItem(2));</div>
<div class="line"><a id="l00751" name="l00751"></a><span class="lineno"> 751</span> right-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ab4e5f7b7b260bb81d9441652cc124c74">SetChild</a>(0, <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;GetChild(2));</div>
<div class="line"><a id="l00752" name="l00752"></a><span class="lineno"> 752</span> right-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ab4e5f7b7b260bb81d9441652cc124c74">SetChild</a>(1, <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;GetChild(3));</div>
<div class="line"><a id="l00753" name="l00753"></a><span class="lineno"> 753</span> </div>
<div class="line"><a id="l00754" name="l00754"></a><span class="lineno"> 754</span> <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *parent = <span class="keyword">new</span> <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a>(<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;GetItem(1));</div>
<div class="line"><a id="l00755" name="l00755"></a><span class="lineno"> 755</span> parent-&gt;SetChild(0, left);</div>
<div class="line"><a id="l00756" name="l00756"></a><span class="lineno"> 756</span> parent-&gt;SetChild(1, right);</div>
<div class="line"><a id="l00757" name="l00757"></a><span class="lineno"> 757</span> </div>
<div class="line"><a id="l00758" name="l00758"></a><span class="lineno"> 758</span> left-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#af564fd4b0992fff69f90de201542d3d1">SetCount</a>(1);</div>
<div class="line"><a id="l00759" name="l00759"></a><span class="lineno"> 759</span> </div>
<div class="line"><a id="l00760" name="l00760"></a><span class="lineno"> 760</span> <span class="keywordflow">return</span> parent;</div>
<div class="line"><a id="l00761" name="l00761"></a><span class="lineno"> 761</span>}</div>
</div>
<div class="line"><a id="l00762" name="l00762"></a><span class="lineno"> 762</span></div>
<div class="foldopen" id="foldopen00778" data-start="{" data-end="}">
<div class="line"><a id="l00778" name="l00778"></a><span class="lineno"><a class="line" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#ac5361479dd996eb331759f33808657d9"> 778</a></span><span class="keywordtype">bool</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#ac5361479dd996eb331759f33808657d9">Tree234::TryLeftRotate</a>(<a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *parent, <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *to_child) {</div>
<div class="line"><a id="l00779" name="l00779"></a><span class="lineno"> 779</span> <span class="keywordtype">int</span> to_child_index = parent-&gt;GetChildIndex(to_child);</div>
<div class="line"><a id="l00780" name="l00780"></a><span class="lineno"> 780</span> </div>
<div class="line"><a id="l00781" name="l00781"></a><span class="lineno"> 781</span> <span class="comment">// child is right most, can not do left rotate to it</span></div>
<div class="line"><a id="l00782" name="l00782"></a><span class="lineno"> 782</span> <span class="keywordflow">if</span> (to_child_index &gt;= parent-&gt;GetCount()) {</div>
<div class="line"><a id="l00783" name="l00783"></a><span class="lineno"> 783</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00784" name="l00784"></a><span class="lineno"> 784</span> }</div>
<div class="line"><a id="l00785" name="l00785"></a><span class="lineno"> 785</span> </div>
<div class="line"><a id="l00786" name="l00786"></a><span class="lineno"> 786</span> <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *right_sibling = parent-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a164574a9209b5df66368530d090b32c4">GetChild</a>(to_child_index + 1);</div>
<div class="line"><a id="l00787" name="l00787"></a><span class="lineno"> 787</span> </div>
<div class="line"><a id="l00788" name="l00788"></a><span class="lineno"> 788</span> <span class="comment">// right sibling is 2-node. can not do left rotate.</span></div>
<div class="line"><a id="l00789" name="l00789"></a><span class="lineno"> 789</span> <span class="keywordflow">if</span> (right_sibling-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#afd9f83e2d5d7f22f79c1348e98914631">Is2Node</a>()) {</div>
<div class="line"><a id="l00790" name="l00790"></a><span class="lineno"> 790</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00791" name="l00791"></a><span class="lineno"> 791</span> }</div>
<div class="line"><a id="l00792" name="l00792"></a><span class="lineno"> 792</span> </div>
<div class="line"><a id="l00793" name="l00793"></a><span class="lineno"> 793</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#ae58dca20f08eaf9313f6e7b0869c2d0e">LeftRotate</a>(parent, to_child_index);</div>
<div class="line"><a id="l00794" name="l00794"></a><span class="lineno"> 794</span> </div>
<div class="line"><a id="l00795" name="l00795"></a><span class="lineno"> 795</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00796" name="l00796"></a><span class="lineno"> 796</span>}</div>
</div>
<div class="line"><a id="l00797" name="l00797"></a><span class="lineno"> 797</span></div>
<div class="foldopen" id="foldopen00813" data-start="{" data-end="}">
<div class="line"><a id="l00813" name="l00813"></a><span class="lineno"><a class="line" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#aec0642d1d151521ca7c70ea85cdb15d3"> 813</a></span><span class="keywordtype">bool</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#aec0642d1d151521ca7c70ea85cdb15d3">Tree234::TryRightRotate</a>(<a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *parent, <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *to_child) {</div>
<div class="line"><a id="l00814" name="l00814"></a><span class="lineno"> 814</span> int8_t to_child_index = parent-&gt;GetChildIndex(to_child);</div>
<div class="line"><a id="l00815" name="l00815"></a><span class="lineno"> 815</span> </div>
<div class="line"><a id="l00816" name="l00816"></a><span class="lineno"> 816</span> <span class="comment">// child is left most, can not do right rotate to it</span></div>
<div class="line"><a id="l00817" name="l00817"></a><span class="lineno"> 817</span> <span class="keywordflow">if</span> (to_child_index &lt;= 0) {</div>
<div class="line"><a id="l00818" name="l00818"></a><span class="lineno"> 818</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00819" name="l00819"></a><span class="lineno"> 819</span> }</div>
<div class="line"><a id="l00820" name="l00820"></a><span class="lineno"> 820</span> </div>
<div class="line"><a id="l00821" name="l00821"></a><span class="lineno"> 821</span> <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *left_sibling = parent-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a164574a9209b5df66368530d090b32c4">GetChild</a>(to_child_index - 1);</div>
<div class="line"><a id="l00822" name="l00822"></a><span class="lineno"> 822</span> </div>
<div class="line"><a id="l00823" name="l00823"></a><span class="lineno"> 823</span> <span class="comment">// right sibling is 2-node. can not do left rotate.</span></div>
<div class="line"><a id="l00824" name="l00824"></a><span class="lineno"> 824</span> <span class="keywordflow">if</span> (left_sibling-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#afd9f83e2d5d7f22f79c1348e98914631">Is2Node</a>()) {</div>
<div class="line"><a id="l00825" name="l00825"></a><span class="lineno"> 825</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00826" name="l00826"></a><span class="lineno"> 826</span> }</div>
<div class="line"><a id="l00827" name="l00827"></a><span class="lineno"> 827</span> </div>
<div class="line"><a id="l00828" name="l00828"></a><span class="lineno"> 828</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#ae68f8e62be02657c1287def6b38d7cc9">RightRotate</a>(parent, to_child_index - 1);</div>
<div class="line"><a id="l00829" name="l00829"></a><span class="lineno"> 829</span> </div>
<div class="line"><a id="l00830" name="l00830"></a><span class="lineno"> 830</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00831" name="l00831"></a><span class="lineno"> 831</span>}</div>
</div>
<div class="line"><a id="l00832" name="l00832"></a><span class="lineno"> 832</span></div>
<div class="foldopen" id="foldopen00845" data-start="{" data-end="}">
<div class="line"><a id="l00845" name="l00845"></a><span class="lineno"><a class="line" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#ae68f8e62be02657c1287def6b38d7cc9"> 845</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#ae68f8e62be02657c1287def6b38d7cc9">Tree234::RightRotate</a>(<a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *parent, int8_t index) {</div>
<div class="line"><a id="l00846" name="l00846"></a><span class="lineno"> 846</span> <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *left = parent-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ab654d7376d3449fdc78edab0e7fed06e">GetItemLeftChild</a>(index);</div>
<div class="line"><a id="l00847" name="l00847"></a><span class="lineno"> 847</span> <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *right = parent-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a441cbee9896391f2b167d5aa7b4f8c95">GetItemRightChild</a>(index);</div>
<div class="line"><a id="l00848" name="l00848"></a><span class="lineno"> 848</span> </div>
<div class="line"><a id="l00849" name="l00849"></a><span class="lineno"> 849</span> assert(left &amp;&amp; left-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a6c5f929afcbad5219646990edee22e18">Is34Node</a>());</div>
<div class="line"><a id="l00850" name="l00850"></a><span class="lineno"> 850</span> assert(right &amp;&amp; right-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#afd9f83e2d5d7f22f79c1348e98914631">Is2Node</a>());</div>
<div class="line"><a id="l00851" name="l00851"></a><span class="lineno"> 851</span> </div>
<div class="line"><a id="l00852" name="l00852"></a><span class="lineno"> 852</span> right-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a306a30931f54c84098b38d6bc8f4a956">InsertItemByIndex</a>(0, parent-&gt;GetItem(index),</div>
<div class="line"><a id="l00853" name="l00853"></a><span class="lineno"> 853</span> left-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a731f9ae385840cf0a06d55e7f9924a94">GetRightmostChild</a>(), <span class="keyword">true</span>);</div>
<div class="line"><a id="l00854" name="l00854"></a><span class="lineno"> 854</span> parent-&gt;SetItem(index, left-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a2753b6053b8c86c5bd987a44fdfa0a57">GetMaxItem</a>());</div>
<div class="line"><a id="l00855" name="l00855"></a><span class="lineno"> 855</span> left-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a28944bb16ec22650b47fe3e80e3e13f8">RemoveItemByIndex</a>(left-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#aac82e17daa088ede9ee00dc69c1e6f06">GetCount</a>() - 1, <span class="keyword">true</span>);</div>
<div class="line"><a id="l00856" name="l00856"></a><span class="lineno"> 856</span>}</div>
</div>
<div class="line"><a id="l00857" name="l00857"></a><span class="lineno"> 857</span></div>
<div class="foldopen" id="foldopen00869" data-start="{" data-end="}">
<div class="line"><a id="l00869" name="l00869"></a><span class="lineno"><a class="line" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#ae58dca20f08eaf9313f6e7b0869c2d0e"> 869</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#ae58dca20f08eaf9313f6e7b0869c2d0e">Tree234::LeftRotate</a>(<a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *parent, int8_t index) {</div>
<div class="line"><a id="l00870" name="l00870"></a><span class="lineno"> 870</span> <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *left = parent-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ab654d7376d3449fdc78edab0e7fed06e">GetItemLeftChild</a>(index);</div>
<div class="line"><a id="l00871" name="l00871"></a><span class="lineno"> 871</span> <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *right = parent-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a441cbee9896391f2b167d5aa7b4f8c95">GetItemRightChild</a>(index);</div>
<div class="line"><a id="l00872" name="l00872"></a><span class="lineno"> 872</span> </div>
<div class="line"><a id="l00873" name="l00873"></a><span class="lineno"> 873</span> assert(right &amp;&amp; right-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a6c5f929afcbad5219646990edee22e18">Is34Node</a>());</div>
<div class="line"><a id="l00874" name="l00874"></a><span class="lineno"> 874</span> assert(left &amp;&amp; left-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#afd9f83e2d5d7f22f79c1348e98914631">Is2Node</a>());</div>
<div class="line"><a id="l00875" name="l00875"></a><span class="lineno"> 875</span> </div>
<div class="line"><a id="l00876" name="l00876"></a><span class="lineno"> 876</span> left-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a306a30931f54c84098b38d6bc8f4a956">InsertItemByIndex</a>(left-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#aac82e17daa088ede9ee00dc69c1e6f06">GetCount</a>(), parent-&gt;GetItem(index),</div>
<div class="line"><a id="l00877" name="l00877"></a><span class="lineno"> 877</span> right-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ac6f619a1605cb46196360889fff4529e">GetLeftmostChild</a>(), <span class="keyword">false</span>);</div>
<div class="line"><a id="l00878" name="l00878"></a><span class="lineno"> 878</span> parent-&gt;SetItem(index, right-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a5438d0a47850f520b2262b5a42f75b71">GetMinItem</a>());</div>
<div class="line"><a id="l00879" name="l00879"></a><span class="lineno"> 879</span> right-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a28944bb16ec22650b47fe3e80e3e13f8">RemoveItemByIndex</a>(0, <span class="keyword">false</span>);</div>
<div class="line"><a id="l00880" name="l00880"></a><span class="lineno"> 880</span>}</div>
</div>
<div class="line"><a id="l00881" name="l00881"></a><span class="lineno"> 881</span></div>
<div class="foldopen" id="foldopen00895" data-start="{" data-end="}">
<div class="line"><a id="l00895" name="l00895"></a><span class="lineno"><a class="line" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a36f4d5f603f7edb7db7c73fb53ba14e9"> 895</a></span><a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *<a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a36f4d5f603f7edb7db7c73fb53ba14e9">Tree234::Merge</a>(<a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *parent, int8_t index) {</div>
<div class="line"><a id="l00896" name="l00896"></a><span class="lineno"> 896</span> assert(parent);</div>
<div class="line"><a id="l00897" name="l00897"></a><span class="lineno"> 897</span> </div>
<div class="line"><a id="l00898" name="l00898"></a><span class="lineno"> 898</span> <span class="comment">// bool is_parent_2node = parent-&gt;Is2Node();</span></div>
<div class="line"><a id="l00899" name="l00899"></a><span class="lineno"> 899</span> </div>
<div class="line"><a id="l00900" name="l00900"></a><span class="lineno"> 900</span> <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *left_child = parent-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ab654d7376d3449fdc78edab0e7fed06e">GetItemLeftChild</a>(index);</div>
<div class="line"><a id="l00901" name="l00901"></a><span class="lineno"> 901</span> <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *right_child = parent-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a441cbee9896391f2b167d5aa7b4f8c95">GetItemRightChild</a>(index);</div>
<div class="line"><a id="l00902" name="l00902"></a><span class="lineno"> 902</span> </div>
<div class="line"><a id="l00903" name="l00903"></a><span class="lineno"> 903</span> assert(left_child-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#afd9f83e2d5d7f22f79c1348e98914631">Is2Node</a>() &amp;&amp; right_child-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#afd9f83e2d5d7f22f79c1348e98914631">Is2Node</a>());</div>
<div class="line"><a id="l00904" name="l00904"></a><span class="lineno"> 904</span> </div>
<div class="line"><a id="l00905" name="l00905"></a><span class="lineno"> 905</span> int64_t item = parent-&gt;GetItem(index);</div>
<div class="line"><a id="l00906" name="l00906"></a><span class="lineno"> 906</span> </div>
<div class="line"><a id="l00907" name="l00907"></a><span class="lineno"> 907</span> <span class="comment">// 1. merge parent&#39;s item and right child to left child</span></div>
<div class="line"><a id="l00908" name="l00908"></a><span class="lineno"> 908</span> left_child-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#aaa89a3016b5dd1be3552321c34343cbc">SetItem</a>(1, item);</div>
<div class="line"><a id="l00909" name="l00909"></a><span class="lineno"> 909</span> left_child-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#aaa89a3016b5dd1be3552321c34343cbc">SetItem</a>(2, right_child-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a4808acb43668ff8cfd6f7cb44ceedad3">GetItem</a>(0));</div>
<div class="line"><a id="l00910" name="l00910"></a><span class="lineno"> 910</span> left_child-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ab4e5f7b7b260bb81d9441652cc124c74">SetChild</a>(2, right_child-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a164574a9209b5df66368530d090b32c4">GetChild</a>(0));</div>
<div class="line"><a id="l00911" name="l00911"></a><span class="lineno"> 911</span> left_child-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ab4e5f7b7b260bb81d9441652cc124c74">SetChild</a>(3, right_child-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a164574a9209b5df66368530d090b32c4">GetChild</a>(1));</div>
<div class="line"><a id="l00912" name="l00912"></a><span class="lineno"> 912</span> </div>
<div class="line"><a id="l00913" name="l00913"></a><span class="lineno"> 913</span> left_child-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#af564fd4b0992fff69f90de201542d3d1">SetCount</a>(3);</div>
<div class="line"><a id="l00914" name="l00914"></a><span class="lineno"> 914</span> </div>
<div class="line"><a id="l00915" name="l00915"></a><span class="lineno"> 915</span> <span class="comment">// 2. remove the parent&#39;s item</span></div>
<div class="line"><a id="l00916" name="l00916"></a><span class="lineno"> 916</span> parent-&gt;RemoveItemByIndex(index, <span class="keyword">true</span>);</div>
<div class="line"><a id="l00917" name="l00917"></a><span class="lineno"> 917</span> </div>
<div class="line"><a id="l00918" name="l00918"></a><span class="lineno"> 918</span> <span class="comment">// 3. delete the unused right child</span></div>
<div class="line"><a id="l00919" name="l00919"></a><span class="lineno"> 919</span> <span class="keyword">delete</span> right_child;</div>
<div class="line"><a id="l00920" name="l00920"></a><span class="lineno"> 920</span> </div>
<div class="line"><a id="l00921" name="l00921"></a><span class="lineno"> 921</span> <span class="keywordflow">return</span> left_child;</div>
<div class="line"><a id="l00922" name="l00922"></a><span class="lineno"> 922</span>}</div>
</div>
<div class="line"><a id="l00923" name="l00923"></a><span class="lineno"> 923</span></div>
<div class="line"><a id="l00929" name="l00929"></a><span class="lineno"><a class="line" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a5da1be3f5b5d967ebb36a201f3ebad11"> 929</a></span><span class="keywordtype">bool</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a5da1be3f5b5d967ebb36a201f3ebad11">Tree234::Remove</a>(int64_t item) { <span class="keywordflow">return</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a61dd051a74e5f36c8dc03dae8dca6ef4">RemovePreMerge</a>(<a class="code hl_variable" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a348ea76c7629b2dcf740be062f970a36">root_</a>, item); }</div>
<div class="line"><a id="l00930" name="l00930"></a><span class="lineno"> 930</span></div>
<div class="foldopen" id="foldopen00937" data-start="{" data-end="}">
<div class="line"><a id="l00937" name="l00937"></a><span class="lineno"><a class="line" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a61dd051a74e5f36c8dc03dae8dca6ef4"> 937</a></span><span class="keywordtype">bool</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a61dd051a74e5f36c8dc03dae8dca6ef4">Tree234::RemovePreMerge</a>(<a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>, int64_t item) {</div>
<div class="line"><a id="l00938" name="l00938"></a><span class="lineno"> 938</span> <span class="keywordflow">while</span> (<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>) {</div>
<div class="line"><a id="l00939" name="l00939"></a><span class="lineno"> 939</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;IsLeaf()) {</div>
<div class="line"><a id="l00940" name="l00940"></a><span class="lineno"> 940</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;Contains(item)) {</div>
<div class="line"><a id="l00941" name="l00941"></a><span class="lineno"> 941</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;Is2Node()) {</div>
<div class="line"><a id="l00942" name="l00942"></a><span class="lineno"> 942</span> <span class="comment">// node must be root</span></div>
<div class="line"><a id="l00943" name="l00943"></a><span class="lineno"> 943</span> <span class="keyword">delete</span> <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>;</div>
<div class="line"><a id="l00944" name="l00944"></a><span class="lineno"> 944</span> <a class="code hl_variable" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a348ea76c7629b2dcf740be062f970a36">root_</a> = <span class="keyword">nullptr</span>;</div>
<div class="line"><a id="l00945" name="l00945"></a><span class="lineno"> 945</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l00946" name="l00946"></a><span class="lineno"> 946</span> <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;RemoveItemByIndex(<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;GetItemIndex(item), <span class="keyword">true</span>);</div>
<div class="line"><a id="l00947" name="l00947"></a><span class="lineno"> 947</span> }</div>
<div class="line"><a id="l00948" name="l00948"></a><span class="lineno"> 948</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00949" name="l00949"></a><span class="lineno"> 949</span> }</div>
<div class="line"><a id="l00950" name="l00950"></a><span class="lineno"> 950</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00951" name="l00951"></a><span class="lineno"> 951</span> }</div>
<div class="line"><a id="l00952" name="l00952"></a><span class="lineno"> 952</span> </div>
<div class="line"><a id="l00953" name="l00953"></a><span class="lineno"> 953</span> <span class="comment">// node is internal</span></div>
<div class="line"><a id="l00954" name="l00954"></a><span class="lineno"> 954</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;Contains(item)) {</div>
<div class="line"><a id="l00955" name="l00955"></a><span class="lineno"> 955</span> int8_t index = <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;GetItemIndex(item);</div>
<div class="line"><a id="l00956" name="l00956"></a><span class="lineno"> 956</span> </div>
<div class="line"><a id="l00957" name="l00957"></a><span class="lineno"> 957</span> <span class="comment">// Here is important!!! What we do next depend on its children&#39;s</span></div>
<div class="line"><a id="l00958" name="l00958"></a><span class="lineno"> 958</span> <span class="comment">// state. Why?</span></div>
<div class="line"><a id="l00959" name="l00959"></a><span class="lineno"> 959</span> <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *left_child = <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;GetItemLeftChild(index);</div>
<div class="line"><a id="l00960" name="l00960"></a><span class="lineno"> 960</span> <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *right_child = <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;GetItemRightChild(index);</div>
<div class="line"><a id="l00961" name="l00961"></a><span class="lineno"> 961</span> assert(left_child &amp;&amp; right_child);</div>
<div class="line"><a id="l00962" name="l00962"></a><span class="lineno"> 962</span> </div>
<div class="line"><a id="l00963" name="l00963"></a><span class="lineno"> 963</span> <span class="keywordflow">if</span> (left_child-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#afd9f83e2d5d7f22f79c1348e98914631">Is2Node</a>() &amp;&amp; right_child-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#afd9f83e2d5d7f22f79c1348e98914631">Is2Node</a>()) {</div>
<div class="line"><a id="l00964" name="l00964"></a><span class="lineno"> 964</span> <span class="comment">// both left and right child are 2-node,we should not modify</span></div>
<div class="line"><a id="l00965" name="l00965"></a><span class="lineno"> 965</span> <span class="comment">// current node in this situation. Because we are going to do</span></div>
<div class="line"><a id="l00966" name="l00966"></a><span class="lineno"> 966</span> <span class="comment">// merge with its children which will move target item to next</span></div>
<div class="line"><a id="l00967" name="l00967"></a><span class="lineno"> 967</span> <span class="comment">// layer. so if we replace the item with successor or</span></div>
<div class="line"><a id="l00968" name="l00968"></a><span class="lineno"> 968</span> <span class="comment">// predecessor now, when we do the recursive remove with</span></div>
<div class="line"><a id="l00969" name="l00969"></a><span class="lineno"> 969</span> <span class="comment">// successor or predecessor, we will result in removing the just</span></div>
<div class="line"><a id="l00970" name="l00970"></a><span class="lineno"> 970</span> <span class="comment">// replaced one in the merged node. That&#39;s not what we want.</span></div>
<div class="line"><a id="l00971" name="l00971"></a><span class="lineno"> 971</span> </div>
<div class="line"><a id="l00972" name="l00972"></a><span class="lineno"> 972</span> <span class="comment">// we need to convert the child 2-node to 3-node or 4-node</span></div>
<div class="line"><a id="l00973" name="l00973"></a><span class="lineno"> 973</span> <span class="comment">// first. First we try to see if any of them can convert to</span></div>
<div class="line"><a id="l00974" name="l00974"></a><span class="lineno"> 974</span> <span class="comment">// 3-node by rotate. By using rotate we keep the empty house for</span></div>
<div class="line"><a id="l00975" name="l00975"></a><span class="lineno"> 975</span> <span class="comment">// the future insertion which will be more efficient than merge.</span></div>
<div class="line"><a id="l00976" name="l00976"></a><span class="lineno"> 976</span> <span class="comment">//</span></div>
<div class="line"><a id="l00977" name="l00977"></a><span class="lineno"> 977</span> <span class="comment">// | ? | node | ? |</span></div>
<div class="line"><a id="l00978" name="l00978"></a><span class="lineno"> 978</span> <span class="comment">// / | | \</span></div>
<div class="line"><a id="l00979" name="l00979"></a><span class="lineno"> 979</span><span class="comment"> // / | | \</span></div>
<div class="line"><a id="l00980" name="l00980"></a><span class="lineno"> 980</span><span class="comment"> // / | | \</span></div>
<div class="line"><a id="l00981" name="l00981"></a><span class="lineno"> 981</span><span class="comment"> // / | | \</span></div>
<div class="line"><a id="l00982" name="l00982"></a><span class="lineno"> 982</span><span class="comment"> // / | | \</span></div>
<div class="line"><a id="l00983" name="l00983"></a><span class="lineno"> 983</span><span class="comment"> // / | | \</span></div>
<div class="line"><a id="l00984" name="l00984"></a><span class="lineno"> 984</span><span class="comment"> // ? left_child right_child ?</span></div>
<div class="line"><a id="l00985" name="l00985"></a><span class="lineno"> 985</span> <span class="comment">//</span></div>
<div class="line"><a id="l00986" name="l00986"></a><span class="lineno"> 986</span> </div>
<div class="line"><a id="l00987" name="l00987"></a><span class="lineno"> 987</span> <span class="comment">// node must be the root</span></div>
<div class="line"><a id="l00988" name="l00988"></a><span class="lineno"> 988</span> <span class="keywordflow">if</span> (<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;Is2Node()) {</div>
<div class="line"><a id="l00989" name="l00989"></a><span class="lineno"> 989</span> <span class="comment">// this means we can&#39;t avoid merging the target item into</span></div>
<div class="line"><a id="l00990" name="l00990"></a><span class="lineno"> 990</span> <span class="comment">// next layer, and this will cause us do different process</span></div>
<div class="line"><a id="l00991" name="l00991"></a><span class="lineno"> 991</span> <span class="comment">// compared with other cases</span></div>
<div class="line"><a id="l00992" name="l00992"></a><span class="lineno"> 992</span> <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *new_root = <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a36f4d5f603f7edb7db7c73fb53ba14e9">Merge</a>(<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>, index);</div>
<div class="line"><a id="l00993" name="l00993"></a><span class="lineno"> 993</span> <span class="keyword">delete</span> <a class="code hl_variable" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a348ea76c7629b2dcf740be062f970a36">root_</a>;</div>
<div class="line"><a id="l00994" name="l00994"></a><span class="lineno"> 994</span> <a class="code hl_variable" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a348ea76c7629b2dcf740be062f970a36">root_</a> = new_root;</div>
<div class="line"><a id="l00995" name="l00995"></a><span class="lineno"> 995</span> <a class="code hl_class" href="../../d5/da1/structnode.html">node</a> = <a class="code hl_variable" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a348ea76c7629b2dcf740be062f970a36">root_</a>;</div>
<div class="line"><a id="l00996" name="l00996"></a><span class="lineno"> 996</span> </div>
<div class="line"><a id="l00997" name="l00997"></a><span class="lineno"> 997</span> <span class="comment">// now node point to the</span></div>
<div class="line"><a id="l00998" name="l00998"></a><span class="lineno"> 998</span> <span class="keywordflow">continue</span>;</div>
<div class="line"><a id="l00999" name="l00999"></a><span class="lineno"> 999</span> }</div>
<div class="line"><a id="l01000" name="l01000"></a><span class="lineno"> 1000</span> </div>
<div class="line"><a id="l01001" name="l01001"></a><span class="lineno"> 1001</span> <span class="comment">// here means we can avoid merging the target item into next</span></div>
<div class="line"><a id="l01002" name="l01002"></a><span class="lineno"> 1002</span> <span class="comment">// layer. So we convert one of its left or right child to 3-node</span></div>
<div class="line"><a id="l01003" name="l01003"></a><span class="lineno"> 1003</span> <span class="comment">// and then do the successor or predecessor swap and recursive</span></div>
<div class="line"><a id="l01004" name="l01004"></a><span class="lineno"> 1004</span> <span class="comment">// remove the next layer will successor or predecessor.</span></div>
<div class="line"><a id="l01005" name="l01005"></a><span class="lineno"> 1005</span> <span class="keywordflow">do</span> {</div>
<div class="line"><a id="l01006" name="l01006"></a><span class="lineno"> 1006</span> <span class="keywordflow">if</span> (index &gt; 0) {</div>
<div class="line"><a id="l01007" name="l01007"></a><span class="lineno"> 1007</span> <span class="comment">// left_child has left-sibling, we check if we can do a</span></div>
<div class="line"><a id="l01008" name="l01008"></a><span class="lineno"> 1008</span> <span class="comment">// rotate</span></div>
<div class="line"><a id="l01009" name="l01009"></a><span class="lineno"> 1009</span> <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *left_sibling = <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;GetItemLeftChild(index - 1);</div>
<div class="line"><a id="l01010" name="l01010"></a><span class="lineno"> 1010</span> <span class="keywordflow">if</span> (left_sibling-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a6c5f929afcbad5219646990edee22e18">Is34Node</a>()) {</div>
<div class="line"><a id="l01011" name="l01011"></a><span class="lineno"> 1011</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#ae68f8e62be02657c1287def6b38d7cc9">RightRotate</a>(<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>, index - 1);</div>
<div class="line"><a id="l01012" name="l01012"></a><span class="lineno"> 1012</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01013" name="l01013"></a><span class="lineno"> 1013</span> }</div>
<div class="line"><a id="l01014" name="l01014"></a><span class="lineno"> 1014</span> }</div>
<div class="line"><a id="l01015" name="l01015"></a><span class="lineno"> 1015</span> </div>
<div class="line"><a id="l01016" name="l01016"></a><span class="lineno"> 1016</span> <span class="keywordflow">if</span> (index &lt; node-&gt;GetCount() - 1) {</div>
<div class="line"><a id="l01017" name="l01017"></a><span class="lineno"> 1017</span> <span class="comment">// right_child has right-sibling, we check if we can do</span></div>
<div class="line"><a id="l01018" name="l01018"></a><span class="lineno"> 1018</span> <span class="comment">// a rotate</span></div>
<div class="line"><a id="l01019" name="l01019"></a><span class="lineno"> 1019</span> <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *right_sibling =</div>
<div class="line"><a id="l01020" name="l01020"></a><span class="lineno"> 1020</span> <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;GetItemRightChild(index + 1);</div>
<div class="line"><a id="l01021" name="l01021"></a><span class="lineno"> 1021</span> <span class="keywordflow">if</span> (right_sibling-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a6c5f929afcbad5219646990edee22e18">Is34Node</a>()) {</div>
<div class="line"><a id="l01022" name="l01022"></a><span class="lineno"> 1022</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#ae58dca20f08eaf9313f6e7b0869c2d0e">LeftRotate</a>(<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>, index + 1);</div>
<div class="line"><a id="l01023" name="l01023"></a><span class="lineno"> 1023</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01024" name="l01024"></a><span class="lineno"> 1024</span> }</div>
<div class="line"><a id="l01025" name="l01025"></a><span class="lineno"> 1025</span> }</div>
<div class="line"><a id="l01026" name="l01026"></a><span class="lineno"> 1026</span> </div>
<div class="line"><a id="l01027" name="l01027"></a><span class="lineno"> 1027</span> <span class="comment">// we do a merge. We avoid merging the target item, which</span></div>
<div class="line"><a id="l01028" name="l01028"></a><span class="lineno"> 1028</span> <span class="comment">// may trigger another merge in the recursion process.</span></div>
<div class="line"><a id="l01029" name="l01029"></a><span class="lineno"> 1029</span> <span class="keywordflow">if</span> (index &gt; 0) {</div>
<div class="line"><a id="l01030" name="l01030"></a><span class="lineno"> 1030</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a36f4d5f603f7edb7db7c73fb53ba14e9">Merge</a>(<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>, index - 1);</div>
<div class="line"><a id="l01031" name="l01031"></a><span class="lineno"> 1031</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01032" name="l01032"></a><span class="lineno"> 1032</span> }</div>
<div class="line"><a id="l01033" name="l01033"></a><span class="lineno"> 1033</span> </div>
<div class="line"><a id="l01034" name="l01034"></a><span class="lineno"> 1034</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a36f4d5f603f7edb7db7c73fb53ba14e9">Merge</a>(<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>, index + 1);</div>
<div class="line"><a id="l01035" name="l01035"></a><span class="lineno"> 1035</span> </div>
<div class="line"><a id="l01036" name="l01036"></a><span class="lineno"> 1036</span> } <span class="keywordflow">while</span> (<span class="keyword">false</span>);</div>
<div class="line"><a id="l01037" name="l01037"></a><span class="lineno"> 1037</span> }</div>
<div class="line"><a id="l01038" name="l01038"></a><span class="lineno"> 1038</span> </div>
<div class="line"><a id="l01039" name="l01039"></a><span class="lineno"> 1039</span> <span class="comment">// refresh the left_child and right_child since they may be invalid</span></div>
<div class="line"><a id="l01040" name="l01040"></a><span class="lineno"> 1040</span> <span class="comment">// because of merge</span></div>
<div class="line"><a id="l01041" name="l01041"></a><span class="lineno"> 1041</span> left_child = <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;GetItemLeftChild(index);</div>
<div class="line"><a id="l01042" name="l01042"></a><span class="lineno"> 1042</span> right_child = <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;GetItemRightChild(index);</div>
<div class="line"><a id="l01043" name="l01043"></a><span class="lineno"> 1043</span> </div>
<div class="line"><a id="l01044" name="l01044"></a><span class="lineno"> 1044</span> <span class="keywordflow">if</span> (left_child-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a6c5f929afcbad5219646990edee22e18">Is34Node</a>()) {</div>
<div class="line"><a id="l01045" name="l01045"></a><span class="lineno"> 1045</span> int64_t predecessor_item = <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#ac85ba5abfd6d34dcd908b2afe6464657">GetTreeMaxItem</a>(left_child);</div>
<div class="line"><a id="l01046" name="l01046"></a><span class="lineno"> 1046</span> <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;SetItem(<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;GetItemIndex(item), predecessor_item);</div>
<div class="line"><a id="l01047" name="l01047"></a><span class="lineno"> 1047</span> </div>
<div class="line"><a id="l01048" name="l01048"></a><span class="lineno"> 1048</span> <a class="code hl_class" href="../../d5/da1/structnode.html">node</a> = left_child;</div>
<div class="line"><a id="l01049" name="l01049"></a><span class="lineno"> 1049</span> item = predecessor_item;</div>
<div class="line"><a id="l01050" name="l01050"></a><span class="lineno"> 1050</span> <span class="keywordflow">continue</span>;</div>
<div class="line"><a id="l01051" name="l01051"></a><span class="lineno"> 1051</span> }</div>
<div class="line"><a id="l01052" name="l01052"></a><span class="lineno"> 1052</span> </div>
<div class="line"><a id="l01053" name="l01053"></a><span class="lineno"> 1053</span> <span class="keywordflow">if</span> (right_child-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a6c5f929afcbad5219646990edee22e18">Is34Node</a>()) {</div>
<div class="line"><a id="l01054" name="l01054"></a><span class="lineno"> 1054</span> int64_t successor_item = <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a65a1235659356166a3e9b451c64fcc36">GetTreeMinItem</a>(right_child);</div>
<div class="line"><a id="l01055" name="l01055"></a><span class="lineno"> 1055</span> <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;SetItem(<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;GetItemIndex(item), successor_item);</div>
<div class="line"><a id="l01056" name="l01056"></a><span class="lineno"> 1056</span> <a class="code hl_class" href="../../d5/da1/structnode.html">node</a> = right_child;</div>
<div class="line"><a id="l01057" name="l01057"></a><span class="lineno"> 1057</span> item = successor_item;</div>
<div class="line"><a id="l01058" name="l01058"></a><span class="lineno"> 1058</span> <span class="keywordflow">continue</span>;</div>
<div class="line"><a id="l01059" name="l01059"></a><span class="lineno"> 1059</span> }</div>
<div class="line"><a id="l01060" name="l01060"></a><span class="lineno"> 1060</span> }</div>
<div class="line"><a id="l01061" name="l01061"></a><span class="lineno"> 1061</span> </div>
<div class="line"><a id="l01062" name="l01062"></a><span class="lineno"> 1062</span> <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *next_node = <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;GetNextPossibleChild(item);</div>
<div class="line"><a id="l01063" name="l01063"></a><span class="lineno"> 1063</span> </div>
<div class="line"><a id="l01064" name="l01064"></a><span class="lineno"> 1064</span> <span class="keywordflow">if</span> (next_node-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a6c5f929afcbad5219646990edee22e18">Is34Node</a>()) {</div>
<div class="line"><a id="l01065" name="l01065"></a><span class="lineno"> 1065</span> <a class="code hl_class" href="../../d5/da1/structnode.html">node</a> = next_node;</div>
<div class="line"><a id="l01066" name="l01066"></a><span class="lineno"> 1066</span> <span class="keywordflow">continue</span>;</div>
<div class="line"><a id="l01067" name="l01067"></a><span class="lineno"> 1067</span> }</div>
<div class="line"><a id="l01068" name="l01068"></a><span class="lineno"> 1068</span> </div>
<div class="line"><a id="l01069" name="l01069"></a><span class="lineno"> 1069</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#aec0642d1d151521ca7c70ea85cdb15d3">TryRightRotate</a>(<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>, next_node)) {</div>
<div class="line"><a id="l01070" name="l01070"></a><span class="lineno"> 1070</span> <a class="code hl_class" href="../../d5/da1/structnode.html">node</a> = next_node;</div>
<div class="line"><a id="l01071" name="l01071"></a><span class="lineno"> 1071</span> <span class="keywordflow">continue</span>;</div>
<div class="line"><a id="l01072" name="l01072"></a><span class="lineno"> 1072</span> }</div>
<div class="line"><a id="l01073" name="l01073"></a><span class="lineno"> 1073</span> </div>
<div class="line"><a id="l01074" name="l01074"></a><span class="lineno"> 1074</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#ac5361479dd996eb331759f33808657d9">TryLeftRotate</a>(<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>, next_node)) {</div>
<div class="line"><a id="l01075" name="l01075"></a><span class="lineno"> 1075</span> <a class="code hl_class" href="../../d5/da1/structnode.html">node</a> = next_node;</div>
<div class="line"><a id="l01076" name="l01076"></a><span class="lineno"> 1076</span> <span class="keywordflow">continue</span>;</div>
<div class="line"><a id="l01077" name="l01077"></a><span class="lineno"> 1077</span> }</div>
<div class="line"><a id="l01078" name="l01078"></a><span class="lineno"> 1078</span> </div>
<div class="line"><a id="l01079" name="l01079"></a><span class="lineno"> 1079</span> <span class="comment">// get here means both left sibling and right sibling of next_node is</span></div>
<div class="line"><a id="l01080" name="l01080"></a><span class="lineno"> 1080</span> <span class="comment">// 2-node, so we do merge</span></div>
<div class="line"><a id="l01081" name="l01081"></a><span class="lineno"> 1081</span> int8_t child_index = <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;GetChildIndex(next_node);</div>
<div class="line"><a id="l01082" name="l01082"></a><span class="lineno"> 1082</span> <span class="keywordflow">if</span> (child_index &gt; 0) {</div>
<div class="line"><a id="l01083" name="l01083"></a><span class="lineno"> 1083</span> <a class="code hl_class" href="../../d5/da1/structnode.html">node</a> = <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a36f4d5f603f7edb7db7c73fb53ba14e9">Merge</a>(<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>, child_index - 1);</div>
<div class="line"><a id="l01084" name="l01084"></a><span class="lineno"> 1084</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l01085" name="l01085"></a><span class="lineno"> 1085</span> <a class="code hl_class" href="../../d5/da1/structnode.html">node</a> = <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a36f4d5f603f7edb7db7c73fb53ba14e9">Merge</a>(<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>, child_index);</div>
<div class="line"><a id="l01086" name="l01086"></a><span class="lineno"> 1086</span> }</div>
<div class="line"><a id="l01087" name="l01087"></a><span class="lineno"> 1087</span> </div>
<div class="line"><a id="l01088" name="l01088"></a><span class="lineno"> 1088</span> } <span class="comment">// while</span></div>
<div class="line"><a id="l01089" name="l01089"></a><span class="lineno"> 1089</span> </div>
<div class="line"><a id="l01090" name="l01090"></a><span class="lineno"> 1090</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l01091" name="l01091"></a><span class="lineno"> 1091</span>}</div>
</div>
<div class="line"><a id="l01092" name="l01092"></a><span class="lineno"> 1092</span></div>
<div class="foldopen" id="foldopen01098" data-start="{" data-end="}">
<div class="line"><a id="l01098" name="l01098"></a><span class="lineno"><a class="line" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#ac85ba5abfd6d34dcd908b2afe6464657"> 1098</a></span>int64_t <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#ac85ba5abfd6d34dcd908b2afe6464657">Tree234::GetTreeMaxItem</a>(<a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *tree) {</div>
<div class="line"><a id="l01099" name="l01099"></a><span class="lineno"> 1099</span> assert(tree);</div>
<div class="line"><a id="l01100" name="l01100"></a><span class="lineno"> 1100</span> int64_t max = 0;</div>
<div class="line"><a id="l01101" name="l01101"></a><span class="lineno"> 1101</span> </div>
<div class="line"><a id="l01102" name="l01102"></a><span class="lineno"> 1102</span> <span class="keywordflow">while</span> (tree) {</div>
<div class="line"><a id="l01103" name="l01103"></a><span class="lineno"> 1103</span> max = tree-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a2753b6053b8c86c5bd987a44fdfa0a57">GetMaxItem</a>();</div>
<div class="line"><a id="l01104" name="l01104"></a><span class="lineno"> 1104</span> tree = tree-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a731f9ae385840cf0a06d55e7f9924a94">GetRightmostChild</a>();</div>
<div class="line"><a id="l01105" name="l01105"></a><span class="lineno"> 1105</span> }</div>
<div class="line"><a id="l01106" name="l01106"></a><span class="lineno"> 1106</span> </div>
<div class="line"><a id="l01107" name="l01107"></a><span class="lineno"> 1107</span> <span class="keywordflow">return</span> max;</div>
<div class="line"><a id="l01108" name="l01108"></a><span class="lineno"> 1108</span>}</div>
</div>
<div class="line"><a id="l01109" name="l01109"></a><span class="lineno"> 1109</span></div>
<div class="foldopen" id="foldopen01115" data-start="{" data-end="}">
<div class="line"><a id="l01115" name="l01115"></a><span class="lineno"><a class="line" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a65a1235659356166a3e9b451c64fcc36"> 1115</a></span>int64_t <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a65a1235659356166a3e9b451c64fcc36">Tree234::GetTreeMinItem</a>(<a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *tree) {</div>
<div class="line"><a id="l01116" name="l01116"></a><span class="lineno"> 1116</span> assert(tree);</div>
<div class="line"><a id="l01117" name="l01117"></a><span class="lineno"> 1117</span> int64_t min = 0;</div>
<div class="line"><a id="l01118" name="l01118"></a><span class="lineno"> 1118</span> </div>
<div class="line"><a id="l01119" name="l01119"></a><span class="lineno"> 1119</span> <span class="keywordflow">while</span> (tree) {</div>
<div class="line"><a id="l01120" name="l01120"></a><span class="lineno"> 1120</span> min = tree-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a5438d0a47850f520b2262b5a42f75b71">GetMinItem</a>();</div>
<div class="line"><a id="l01121" name="l01121"></a><span class="lineno"> 1121</span> tree = tree-&gt;<a class="code hl_function" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ac6f619a1605cb46196360889fff4529e">GetLeftmostChild</a>();</div>
<div class="line"><a id="l01122" name="l01122"></a><span class="lineno"> 1122</span> }</div>
<div class="line"><a id="l01123" name="l01123"></a><span class="lineno"> 1123</span> </div>
<div class="line"><a id="l01124" name="l01124"></a><span class="lineno"> 1124</span> <span class="keywordflow">return</span> min;</div>
<div class="line"><a id="l01125" name="l01125"></a><span class="lineno"> 1125</span>}</div>
</div>
<div class="line"><a id="l01126" name="l01126"></a><span class="lineno"> 1126</span></div>
<div class="foldopen" id="foldopen01131" data-start="{" data-end="}">
<div class="line"><a id="l01131" name="l01131"></a><span class="lineno"><a class="line" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a2e9a9db7792cf5383f4c4cc418255165"> 1131</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a2e9a9db7792cf5383f4c4cc418255165">Tree234::Print</a>(<span class="keyword">const</span> <span class="keywordtype">char</span> *file_name) {</div>
<div class="line"><a id="l01132" name="l01132"></a><span class="lineno"> 1132</span> <span class="keywordflow">if</span> (!file_name) {</div>
<div class="line"><a id="l01133" name="l01133"></a><span class="lineno"> 1133</span> file_name = <span class="stringliteral">&quot;out.dot&quot;</span>;</div>
<div class="line"><a id="l01134" name="l01134"></a><span class="lineno"> 1134</span> }</div>
<div class="line"><a id="l01135" name="l01135"></a><span class="lineno"> 1135</span> </div>
<div class="line"><a id="l01136" name="l01136"></a><span class="lineno"> 1136</span> std::ofstream ofs;</div>
<div class="line"><a id="l01137" name="l01137"></a><span class="lineno"> 1137</span> </div>
<div class="line"><a id="l01138" name="l01138"></a><span class="lineno"> 1138</span> ofs.open(file_name);</div>
<div class="line"><a id="l01139" name="l01139"></a><span class="lineno"> 1139</span> <span class="keywordflow">if</span> (!ofs) {</div>
<div class="line"><a id="l01140" name="l01140"></a><span class="lineno"> 1140</span> std::cout &lt;&lt; <span class="stringliteral">&quot;create tree dot file failed, &quot;</span> &lt;&lt; file_name &lt;&lt; std::endl;</div>
<div class="line"><a id="l01141" name="l01141"></a><span class="lineno"> 1141</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l01142" name="l01142"></a><span class="lineno"> 1142</span> }</div>
<div class="line"><a id="l01143" name="l01143"></a><span class="lineno"> 1143</span> </div>
<div class="line"><a id="l01144" name="l01144"></a><span class="lineno"> 1144</span> ofs &lt;&lt; <span class="stringliteral">&quot;digraph G {\n&quot;</span>;</div>
<div class="line"><a id="l01145" name="l01145"></a><span class="lineno"> 1145</span> ofs &lt;&lt; <span class="stringliteral">&quot;node [shape=record]\n&quot;</span>;</div>
<div class="line"><a id="l01146" name="l01146"></a><span class="lineno"> 1146</span> </div>
<div class="line"><a id="l01147" name="l01147"></a><span class="lineno"> 1147</span> int64_t index = 0;</div>
<div class="line"><a id="l01148" name="l01148"></a><span class="lineno"> 1148</span></div>
<div class="line"><a id="l01151" name="l01151"></a><span class="lineno"> 1151</span> <span class="keyword">struct </span>NodeInfo {</div>
<div class="line"><a id="l01152" name="l01152"></a><span class="lineno"> 1152</span> <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>; </div>
<div class="line"><a id="l01153" name="l01153"></a><span class="lineno"> 1153</span> int64_t index; </div>
<div class="line"><a id="l01155" name="l01155"></a><span class="lineno"> 1155</span> };</div>
<div class="line"><a id="l01156" name="l01156"></a><span class="lineno"> 1156</span> </div>
<div class="line"><a id="l01157" name="l01157"></a><span class="lineno"> 1157</span> std::queue&lt;NodeInfo&gt; q;</div>
<div class="line"><a id="l01158" name="l01158"></a><span class="lineno"> 1158</span> </div>
<div class="line"><a id="l01159" name="l01159"></a><span class="lineno"> 1159</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a348ea76c7629b2dcf740be062f970a36">root_</a>) {</div>
<div class="line"><a id="l01160" name="l01160"></a><span class="lineno"> 1160</span> <span class="comment">// print root node</span></div>
<div class="line"><a id="l01161" name="l01161"></a><span class="lineno"> 1161</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#af260f0760344771bf8fce4fc9b1739be">PrintNode</a>(ofs, <a class="code hl_variable" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a348ea76c7629b2dcf740be062f970a36">root_</a>, -1, index, 0);</div>
<div class="line"><a id="l01162" name="l01162"></a><span class="lineno"> 1162</span> </div>
<div class="line"><a id="l01163" name="l01163"></a><span class="lineno"> 1163</span> NodeInfo ni{};</div>
<div class="line"><a id="l01164" name="l01164"></a><span class="lineno"> 1164</span> ni.node = <a class="code hl_variable" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a348ea76c7629b2dcf740be062f970a36">root_</a>;</div>
<div class="line"><a id="l01165" name="l01165"></a><span class="lineno"> 1165</span> ni.index = index;</div>
<div class="line"><a id="l01166" name="l01166"></a><span class="lineno"> 1166</span> </div>
<div class="line"><a id="l01167" name="l01167"></a><span class="lineno"> 1167</span> q.push(ni);</div>
<div class="line"><a id="l01168" name="l01168"></a><span class="lineno"> 1168</span> </div>
<div class="line"><a id="l01169" name="l01169"></a><span class="lineno"> 1169</span> <span class="keywordflow">while</span> (!q.empty()) {</div>
<div class="line"><a id="l01170" name="l01170"></a><span class="lineno"> 1170</span> NodeInfo node_info = q.front();</div>
<div class="line"><a id="l01171" name="l01171"></a><span class="lineno"> 1171</span> q.pop();</div>
<div class="line"><a id="l01172" name="l01172"></a><span class="lineno"> 1172</span> </div>
<div class="line"><a id="l01173" name="l01173"></a><span class="lineno"> 1173</span> assert(node_info.node-&gt;GetCount() &gt; 0);</div>
<div class="line"><a id="l01174" name="l01174"></a><span class="lineno"> 1174</span> </div>
<div class="line"><a id="l01175" name="l01175"></a><span class="lineno"> 1175</span> <span class="keywordflow">if</span> (!node_info.node-&gt;IsLeaf()) {</div>
<div class="line"><a id="l01176" name="l01176"></a><span class="lineno"> 1176</span> <span class="keywordflow">if</span> (node_info.node-&gt;GetCount() &gt; 0) {</div>
<div class="line"><a id="l01177" name="l01177"></a><span class="lineno"> 1177</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#af260f0760344771bf8fce4fc9b1739be">PrintNode</a>(ofs, node_info.node-&gt;GetChild(0), node_info.index,</div>
<div class="line"><a id="l01178" name="l01178"></a><span class="lineno"> 1178</span> ++index, 0);</div>
<div class="line"><a id="l01179" name="l01179"></a><span class="lineno"> 1179</span> ni.node = node_info.node-&gt;GetChild(0);</div>
<div class="line"><a id="l01180" name="l01180"></a><span class="lineno"> 1180</span> ni.index = index;</div>
<div class="line"><a id="l01181" name="l01181"></a><span class="lineno"> 1181</span> q.push(ni);</div>
<div class="line"><a id="l01182" name="l01182"></a><span class="lineno"> 1182</span> </div>
<div class="line"><a id="l01183" name="l01183"></a><span class="lineno"> 1183</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#af260f0760344771bf8fce4fc9b1739be">PrintNode</a>(ofs, node_info.node-&gt;GetChild(1), node_info.index,</div>
<div class="line"><a id="l01184" name="l01184"></a><span class="lineno"> 1184</span> ++index, 1);</div>
<div class="line"><a id="l01185" name="l01185"></a><span class="lineno"> 1185</span> ni.node = node_info.node-&gt;GetChild(1);</div>
<div class="line"><a id="l01186" name="l01186"></a><span class="lineno"> 1186</span> ni.index = index;</div>
<div class="line"><a id="l01187" name="l01187"></a><span class="lineno"> 1187</span> q.push(ni);</div>
<div class="line"><a id="l01188" name="l01188"></a><span class="lineno"> 1188</span> }</div>
<div class="line"><a id="l01189" name="l01189"></a><span class="lineno"> 1189</span> </div>
<div class="line"><a id="l01190" name="l01190"></a><span class="lineno"> 1190</span> <span class="keywordflow">if</span> (node_info.node-&gt;GetCount() &gt; 1) {</div>
<div class="line"><a id="l01191" name="l01191"></a><span class="lineno"> 1191</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#af260f0760344771bf8fce4fc9b1739be">PrintNode</a>(ofs, node_info.node-&gt;GetChild(2), node_info.index,</div>
<div class="line"><a id="l01192" name="l01192"></a><span class="lineno"> 1192</span> ++index, 2);</div>
<div class="line"><a id="l01193" name="l01193"></a><span class="lineno"> 1193</span> ni.node = node_info.node-&gt;GetChild(2);</div>
<div class="line"><a id="l01194" name="l01194"></a><span class="lineno"> 1194</span> ni.index = index;</div>
<div class="line"><a id="l01195" name="l01195"></a><span class="lineno"> 1195</span> q.push(ni);</div>
<div class="line"><a id="l01196" name="l01196"></a><span class="lineno"> 1196</span> }</div>
<div class="line"><a id="l01197" name="l01197"></a><span class="lineno"> 1197</span> </div>
<div class="line"><a id="l01198" name="l01198"></a><span class="lineno"> 1198</span> <span class="keywordflow">if</span> (node_info.node-&gt;GetCount() &gt; 2) {</div>
<div class="line"><a id="l01199" name="l01199"></a><span class="lineno"> 1199</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#af260f0760344771bf8fce4fc9b1739be">PrintNode</a>(ofs, node_info.node-&gt;GetChild(3), node_info.index,</div>
<div class="line"><a id="l01200" name="l01200"></a><span class="lineno"> 1200</span> ++index, 3);</div>
<div class="line"><a id="l01201" name="l01201"></a><span class="lineno"> 1201</span> ni.node = node_info.node-&gt;GetChild(3);</div>
<div class="line"><a id="l01202" name="l01202"></a><span class="lineno"> 1202</span> ni.index = index;</div>
<div class="line"><a id="l01203" name="l01203"></a><span class="lineno"> 1203</span> q.push(ni);</div>
<div class="line"><a id="l01204" name="l01204"></a><span class="lineno"> 1204</span> }</div>
<div class="line"><a id="l01205" name="l01205"></a><span class="lineno"> 1205</span> }</div>
<div class="line"><a id="l01206" name="l01206"></a><span class="lineno"> 1206</span> }</div>
<div class="line"><a id="l01207" name="l01207"></a><span class="lineno"> 1207</span> }</div>
<div class="line"><a id="l01208" name="l01208"></a><span class="lineno"> 1208</span> </div>
<div class="line"><a id="l01209" name="l01209"></a><span class="lineno"> 1209</span> ofs &lt;&lt; <span class="stringliteral">&quot;}\n&quot;</span>;</div>
<div class="line"><a id="l01210" name="l01210"></a><span class="lineno"> 1210</span> ofs.close();</div>
<div class="line"><a id="l01211" name="l01211"></a><span class="lineno"> 1211</span>}</div>
</div>
<div class="line"><a id="l01212" name="l01212"></a><span class="lineno"> 1212</span></div>
<div class="foldopen" id="foldopen01226" data-start="{" data-end="}">
<div class="line"><a id="l01226" name="l01226"></a><span class="lineno"><a class="line" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#af260f0760344771bf8fce4fc9b1739be"> 1226</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#af260f0760344771bf8fce4fc9b1739be">Tree234::PrintNode</a>(std::ofstream &amp;ofs, <a class="code hl_class" href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">Node</a> *<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>, int64_t parent_index,</div>
<div class="line"><a id="l01227" name="l01227"></a><span class="lineno"> 1227</span> int64_t index, int8_t parent_child_index) {</div>
<div class="line"><a id="l01228" name="l01228"></a><span class="lineno"> 1228</span> assert(<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>);</div>
<div class="line"><a id="l01229" name="l01229"></a><span class="lineno"> 1229</span> </div>
<div class="line"><a id="l01230" name="l01230"></a><span class="lineno"> 1230</span> <span class="keywordflow">switch</span> (<a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;GetCount()) {</div>
<div class="line"><a id="l01231" name="l01231"></a><span class="lineno"> 1231</span> <span class="keywordflow">case</span> 1:</div>
<div class="line"><a id="l01232" name="l01232"></a><span class="lineno"> 1232</span> ofs &lt;&lt; <span class="stringliteral">&quot;node_&quot;</span> &lt;&lt; index &lt;&lt; <span class="stringliteral">&quot; [label=\&quot;&lt;f0&gt; &quot;</span> &lt;&lt; <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;GetItem(0)</div>
<div class="line"><a id="l01233" name="l01233"></a><span class="lineno"> 1233</span> &lt;&lt; <span class="stringliteral">&quot;\&quot;]\n&quot;</span>;</div>
<div class="line"><a id="l01234" name="l01234"></a><span class="lineno"> 1234</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01235" name="l01235"></a><span class="lineno"> 1235</span> <span class="keywordflow">case</span> 2:</div>
<div class="line"><a id="l01236" name="l01236"></a><span class="lineno"> 1236</span> ofs &lt;&lt; <span class="stringliteral">&quot;node_&quot;</span> &lt;&lt; index &lt;&lt; <span class="stringliteral">&quot; [label=\&quot;&lt;f0&gt; &quot;</span> &lt;&lt; <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;GetItem(0)</div>
<div class="line"><a id="l01237" name="l01237"></a><span class="lineno"> 1237</span> &lt;&lt; <span class="stringliteral">&quot; | &lt;f1&gt; &quot;</span> &lt;&lt; <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;GetItem(1) &lt;&lt; <span class="stringliteral">&quot;\&quot;]\n&quot;</span>;</div>
<div class="line"><a id="l01238" name="l01238"></a><span class="lineno"> 1238</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01239" name="l01239"></a><span class="lineno"> 1239</span> <span class="keywordflow">case</span> 3:</div>
<div class="line"><a id="l01240" name="l01240"></a><span class="lineno"> 1240</span> ofs &lt;&lt; <span class="stringliteral">&quot;node_&quot;</span> &lt;&lt; index &lt;&lt; <span class="stringliteral">&quot; [label=\&quot;&lt;f0&gt; &quot;</span> &lt;&lt; <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;GetItem(0)</div>
<div class="line"><a id="l01241" name="l01241"></a><span class="lineno"> 1241</span> &lt;&lt; <span class="stringliteral">&quot; | &lt;f1&gt; &quot;</span> &lt;&lt; <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;GetItem(1) &lt;&lt; <span class="stringliteral">&quot;| &lt;f2&gt; &quot;</span></div>
<div class="line"><a id="l01242" name="l01242"></a><span class="lineno"> 1242</span> &lt;&lt; <a class="code hl_class" href="../../d5/da1/structnode.html">node</a>-&gt;GetItem(2) &lt;&lt; <span class="stringliteral">&quot;\&quot;]\n&quot;</span>;</div>
<div class="line"><a id="l01243" name="l01243"></a><span class="lineno"> 1243</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01244" name="l01244"></a><span class="lineno"> 1244</span> </div>
<div class="line"><a id="l01245" name="l01245"></a><span class="lineno"> 1245</span> <span class="keywordflow">default</span>:</div>
<div class="line"><a id="l01246" name="l01246"></a><span class="lineno"> 1246</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01247" name="l01247"></a><span class="lineno"> 1247</span> }</div>
<div class="line"><a id="l01248" name="l01248"></a><span class="lineno"> 1248</span> </div>
<div class="line"><a id="l01249" name="l01249"></a><span class="lineno"> 1249</span> <span class="comment">// draw the edge</span></div>
<div class="line"><a id="l01250" name="l01250"></a><span class="lineno"> 1250</span> <span class="keywordflow">if</span> (parent_index &gt;= 0) {</div>
<div class="line"><a id="l01251" name="l01251"></a><span class="lineno"> 1251</span> ofs &lt;&lt; <span class="stringliteral">&quot;node_&quot;</span> &lt;&lt; parent_index &lt;&lt; <span class="stringliteral">&quot;:f&quot;</span></div>
<div class="line"><a id="l01252" name="l01252"></a><span class="lineno"> 1252</span> &lt;&lt; (parent_child_index == 0 ? 0 : parent_child_index - 1) &lt;&lt; <span class="stringliteral">&quot;:&quot;</span></div>
<div class="line"><a id="l01253" name="l01253"></a><span class="lineno"> 1253</span> &lt;&lt; (parent_child_index == 0 ? <span class="stringliteral">&quot;sw&quot;</span> : <span class="stringliteral">&quot;se&quot;</span>) &lt;&lt; <span class="stringliteral">&quot; -&gt; node_&quot;</span> &lt;&lt; index</div>
<div class="line"><a id="l01254" name="l01254"></a><span class="lineno"> 1254</span> &lt;&lt; <span class="stringliteral">&quot;\n&quot;</span>;</div>
<div class="line"><a id="l01255" name="l01255"></a><span class="lineno"> 1255</span> }</div>
<div class="line"><a id="l01256" name="l01256"></a><span class="lineno"> 1256</span>}</div>
</div>
<div class="line"><a id="l01257" name="l01257"></a><span class="lineno"> 1257</span>} <span class="comment">// namespace tree_234</span></div>
<div class="line"><a id="l01258" name="l01258"></a><span class="lineno"> 1258</span>} <span class="comment">// namespace data_structures</span></div>
<div class="line"><a id="l01259" name="l01259"></a><span class="lineno"> 1259</span> </div>
<div class="line"><a id="l01260" name="l01260"></a><span class="lineno"> 1260</span></div>
<div class="foldopen" id="foldopen01263" data-start="{" data-end="}">
<div class="line"><a id="l01263" name="l01263"></a><span class="lineno"><a class="line" href="../../db/dbc/tree__234_8cpp.html#ae7880ce913f3058a35ff106d5be9e243"> 1263</a></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../db/dbc/tree__234_8cpp.html#ae7880ce913f3058a35ff106d5be9e243">test1</a>() {</div>
<div class="line"><a id="l01264" name="l01264"></a><span class="lineno"> 1264</span> std::array&lt;int16_t, 13&gt; arr = {3, 1, 5, 4, 2, 9, 10, 8, 7, 6, 16, 13, 14};</div>
<div class="line"><a id="l01265" name="l01265"></a><span class="lineno"> 1265</span> <a class="code hl_class" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html">data_structures::tree_234::Tree234</a> tree;</div>
<div class="line"><a id="l01266" name="l01266"></a><span class="lineno"> 1266</span> </div>
<div class="line"><a id="l01267" name="l01267"></a><span class="lineno"> 1267</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> i : arr) {</div>
<div class="line"><a id="l01268" name="l01268"></a><span class="lineno"> 1268</span> tree.<a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a6749ebb40710c9752a2771eda03c6b3e">Insert</a>(i);</div>
<div class="line"><a id="l01269" name="l01269"></a><span class="lineno"> 1269</span> }</div>
<div class="line"><a id="l01270" name="l01270"></a><span class="lineno"> 1270</span> </div>
<div class="line"><a id="l01271" name="l01271"></a><span class="lineno"> 1271</span> <span class="comment">// tree.Remove(10);</span></div>
<div class="line"><a id="l01272" name="l01272"></a><span class="lineno"> 1272</span> tree.<a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a5da1be3f5b5d967ebb36a201f3ebad11">Remove</a>(5);</div>
<div class="line"><a id="l01273" name="l01273"></a><span class="lineno"> 1273</span> tree.<a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a2e9a9db7792cf5383f4c4cc418255165">Print</a>();</div>
<div class="line"><a id="l01274" name="l01274"></a><span class="lineno"> 1274</span>}</div>
</div>
<div class="line"><a id="l01275" name="l01275"></a><span class="lineno"> 1275</span></div>
<div class="foldopen" id="foldopen01281" data-start="{" data-end="}">
<div class="line"><a id="l01281" name="l01281"></a><span class="lineno"><a class="line" href="../../db/dbc/tree__234_8cpp.html#af1ac73779b0fcfbbdce3976c0ca57342"> 1281</a></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code hl_function" href="../../d3/dae/dsu__path__compression_8cpp.html#a45d94ead4cf4e1ff9f87c38bc99f59ae">test2</a>(int64_t n) {</div>
<div class="line"><a id="l01282" name="l01282"></a><span class="lineno"> 1282</span> <a class="code hl_class" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html">data_structures::tree_234::Tree234</a> tree;</div>
<div class="line"><a id="l01283" name="l01283"></a><span class="lineno"> 1283</span> </div>
<div class="line"><a id="l01284" name="l01284"></a><span class="lineno"> 1284</span> <span class="keywordflow">for</span> (int64_t i = 0; i &lt; n; i++) {</div>
<div class="line"><a id="l01285" name="l01285"></a><span class="lineno"> 1285</span> tree.<a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a6749ebb40710c9752a2771eda03c6b3e">Insert</a>(i);</div>
<div class="line"><a id="l01286" name="l01286"></a><span class="lineno"> 1286</span> }</div>
<div class="line"><a id="l01287" name="l01287"></a><span class="lineno"> 1287</span> </div>
<div class="line"><a id="l01288" name="l01288"></a><span class="lineno"> 1288</span> tree.<a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a84ab7b4fe7442b5e2eeed8c050bb86bd">Traverse</a>();</div>
<div class="line"><a id="l01289" name="l01289"></a><span class="lineno"> 1289</span> tree.<a class="code hl_function" href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a2e9a9db7792cf5383f4c4cc418255165">Print</a>((std::to_string(n) + <span class="stringliteral">&quot;.dot&quot;</span>).c_str());</div>
<div class="line"><a id="l01290" name="l01290"></a><span class="lineno"> 1290</span>}</div>
</div>
<div class="line"><a id="l01291" name="l01291"></a><span class="lineno"> 1291</span></div>
<div class="foldopen" id="foldopen01298" data-start="{" data-end="}">
<div class="line"><a id="l01298" name="l01298"></a><span class="lineno"><a class="line" href="../../db/dbc/tree__234_8cpp.html#a0ddf1224851353fc92bfbff6f499fa97"> 1298</a></span><span class="keywordtype">int</span> <a class="code hl_function" href="../../dd/d1e/generate__parentheses_8cpp.html#gae66f6b31b5ad750f1fe042a706a4e3d4">main</a>(<span class="keywordtype">int</span> argc, <span class="keywordtype">char</span> *argv[]) {</div>
<div class="line"><a id="l01299" name="l01299"></a><span class="lineno"> 1299</span> <span class="keywordflow">if</span> (argc &lt; 2) {</div>
<div class="line"><a id="l01300" name="l01300"></a><span class="lineno"> 1300</span> <a class="code hl_function" href="../../db/dbc/tree__234_8cpp.html#ae7880ce913f3058a35ff106d5be9e243">test1</a>(); <span class="comment">// execute 1st test</span></div>
<div class="line"><a id="l01301" name="l01301"></a><span class="lineno"> 1301</span> } <span class="keywordflow">else</span> {</div>
<div class="line"><a id="l01302" name="l01302"></a><span class="lineno"> 1302</span> <a class="code hl_function" href="../../d3/dae/dsu__path__compression_8cpp.html#a45d94ead4cf4e1ff9f87c38bc99f59ae">test2</a>(std::stoi(argv[1])); <span class="comment">// execute 2nd test</span></div>
<div class="line"><a id="l01303" name="l01303"></a><span class="lineno"> 1303</span> }</div>
<div class="line"><a id="l01304" name="l01304"></a><span class="lineno"> 1304</span> </div>
<div class="line"><a id="l01305" name="l01305"></a><span class="lineno"> 1305</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l01306" name="l01306"></a><span class="lineno"> 1306</span>}</div>
</div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_node_html"><div class="ttname"><a href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html">data_structures::tree_234::Node</a></div><div class="ttdoc">2-3-4 tree node class</div><div class="ttdef"><b>Definition</b> <a href="#l00035">tree_234.cpp:35</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_node_html_a164574a9209b5df66368530d090b32c4"><div class="ttname"><a href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a164574a9209b5df66368530d090b32c4">data_structures::tree_234::Node::GetChild</a></div><div class="ttdeci">Node * GetChild(int8_t index)</div><div class="ttdoc">Get the child pointer at position of index.</div><div class="ttdef"><b>Definition</b> <a href="#l00252">tree_234.cpp:252</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_node_html_a22fd25c6c811c64b6b27b0850d8c532f"><div class="ttname"><a href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a22fd25c6c811c64b6b27b0850d8c532f">data_structures::tree_234::Node::Contains</a></div><div class="ttdeci">bool Contains(int64_t item)</div><div class="ttdoc">Check if item is in the node.</div><div class="ttdef"><b>Definition</b> <a href="#l00092">tree_234.cpp:92</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_node_html_a2753b6053b8c86c5bd987a44fdfa0a57"><div class="ttname"><a href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a2753b6053b8c86c5bd987a44fdfa0a57">data_structures::tree_234::Node::GetMaxItem</a></div><div class="ttdeci">int64_t GetMaxItem()</div><div class="ttdoc">Get max item (rightmost) in the current node.</div><div class="ttdef"><b>Definition</b> <a href="#l00120">tree_234.cpp:120</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_node_html_a28944bb16ec22650b47fe3e80e3e13f8"><div class="ttname"><a href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a28944bb16ec22650b47fe3e80e3e13f8">data_structures::tree_234::Node::RemoveItemByIndex</a></div><div class="ttdeci">Node * RemoveItemByIndex(int8_t index, bool keep_left)</div><div class="ttdoc">Insert a value to the index position.</div><div class="ttdef"><b>Definition</b> <a href="#l00217">tree_234.cpp:217</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_node_html_a306a30931f54c84098b38d6bc8f4a956"><div class="ttname"><a href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a306a30931f54c84098b38d6bc8f4a956">data_structures::tree_234::Node::InsertItemByIndex</a></div><div class="ttdeci">void InsertItemByIndex(int8_t index, int64_t item, Node *with_child, bool to_left=true)</div><div class="ttdoc">Insert a value to the index position.</div><div class="ttdef"><b>Definition</b> <a href="#l00189">tree_234.cpp:189</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_node_html_a441cbee9896391f2b167d5aa7b4f8c95"><div class="ttname"><a href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a441cbee9896391f2b167d5aa7b4f8c95">data_structures::tree_234::Node::GetItemRightChild</a></div><div class="ttdeci">Node * GetItemRightChild(int8_t item_index)</div><div class="ttdoc">Get right child of item at item_index.</div><div class="ttdef"><b>Definition</b> <a href="#l00291">tree_234.cpp:291</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_node_html_a4808acb43668ff8cfd6f7cb44ceedad3"><div class="ttname"><a href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a4808acb43668ff8cfd6f7cb44ceedad3">data_structures::tree_234::Node::GetItem</a></div><div class="ttdeci">int64_t GetItem(int8_t index)</div><div class="ttdoc">Get item of the \index index.</div><div class="ttdef"><b>Definition</b> <a href="#l00133">tree_234.cpp:133</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_node_html_a4a37381c0ef93d5ae2118b2e554974dd"><div class="ttname"><a href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a4a37381c0ef93d5ae2118b2e554974dd">data_structures::tree_234::Node::IsFull</a></div><div class="ttdeci">bool IsFull()</div><div class="ttdoc">Check if node is a full (4-node)</div><div class="ttdef"><b>Definition</b> <a href="#l00073">tree_234.cpp:73</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_node_html_a5438d0a47850f520b2262b5a42f75b71"><div class="ttname"><a href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a5438d0a47850f520b2262b5a42f75b71">data_structures::tree_234::Node::GetMinItem</a></div><div class="ttdeci">int64_t GetMinItem()</div><div class="ttdoc">get min item (leftmost) in the current node</div><div class="ttdef"><b>Definition</b> <a href="#l00126">tree_234.cpp:126</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_node_html_a607d8201b00b142bf1d6a34df2f936e8"><div class="ttname"><a href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a607d8201b00b142bf1d6a34df2f936e8">data_structures::tree_234::Node::IsLeaf</a></div><div class="ttdeci">bool IsLeaf()</div><div class="ttdoc">Check if node is a leaf.</div><div class="ttdef"><b>Definition</b> <a href="#l00067">tree_234.cpp:67</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_node_html_a650f0ef26b7450e1addb5d80bb0ed629"><div class="ttname"><a href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a650f0ef26b7450e1addb5d80bb0ed629">data_structures::tree_234::Node::GetItemIndex</a></div><div class="ttdeci">int8_t GetItemIndex(int64_t item)</div><div class="ttdoc">Get the index of the item in the node, 0-based.</div><div class="ttdef"><b>Definition</b> <a href="#l00107">tree_234.cpp:107</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_node_html_a6c5f929afcbad5219646990edee22e18"><div class="ttname"><a href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a6c5f929afcbad5219646990edee22e18">data_structures::tree_234::Node::Is34Node</a></div><div class="ttdeci">bool Is34Node()</div><div class="ttdoc">Check if node is a 3-node or 4-node, this is useful when we delete item from 2-3-4 tree.</div><div class="ttdef"><b>Definition</b> <a href="#l00085">tree_234.cpp:85</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_node_html_a731f9ae385840cf0a06d55e7f9924a94"><div class="ttname"><a href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a731f9ae385840cf0a06d55e7f9924a94">data_structures::tree_234::Node::GetRightmostChild</a></div><div class="ttdeci">Node * GetRightmostChild()</div><div class="ttdoc">Get rightmose child of the current node.</div><div class="ttdef"><b>Definition</b> <a href="#l00265">tree_234.cpp:265</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_node_html_a8417d01c88b99ca56289843509fb71f9"><div class="ttname"><a href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a8417d01c88b99ca56289843509fb71f9">data_structures::tree_234::Node::items</a></div><div class="ttdeci">std::array&lt; int64_t, 3 &gt; items</div><div class="ttdoc">store items</div><div class="ttdef"><b>Definition</b> <a href="#l00315">tree_234.cpp:315</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_node_html_a8e809ae85ae00e937f67ddb76951b6bb"><div class="ttname"><a href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a8e809ae85ae00e937f67ddb76951b6bb">data_structures::tree_234::Node::InsertItem</a></div><div class="ttdeci">int InsertItem(int item)</div><div class="ttdoc">Insert item to the proper position of the node and return the position index.</div><div class="ttdef"><b>Definition</b> <a href="#l00163">tree_234.cpp:163</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_node_html_a91322b3bb0b2b2175eb56e9e10d7db46"><div class="ttname"><a href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a91322b3bb0b2b2175eb56e9e10d7db46">data_structures::tree_234::Node::GetNextPossibleChild</a></div><div class="ttdeci">Node * GetNextPossibleChild(int64_t item)</div><div class="ttdoc">Get next node which is possibly contains item.</div><div class="ttdef"><b>Definition</b> <a href="#l00304">tree_234.cpp:304</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_node_html_a934e6d53cfefae2b971e1241a8a4c921"><div class="ttname"><a href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#a934e6d53cfefae2b971e1241a8a4c921">data_structures::tree_234::Node::count</a></div><div class="ttdeci">int8_t count</div><div class="ttdoc">track the current item count</div><div class="ttdef"><b>Definition</b> <a href="#l00319">tree_234.cpp:319</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_node_html_aaa89a3016b5dd1be3552321c34343cbc"><div class="ttname"><a href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#aaa89a3016b5dd1be3552321c34343cbc">data_structures::tree_234::Node::SetItem</a></div><div class="ttdeci">void SetItem(int8_t index, int64_t new_item)</div><div class="ttdoc">Set item value at position of index.</div><div class="ttdef"><b>Definition</b> <a href="#l00140">tree_234.cpp:140</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_node_html_aac82e17daa088ede9ee00dc69c1e6f06"><div class="ttname"><a href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#aac82e17daa088ede9ee00dc69c1e6f06">data_structures::tree_234::Node::GetCount</a></div><div class="ttdeci">int8_t GetCount()</div><div class="ttdoc">Get the item count that current saved in the node.</div><div class="ttdef"><b>Definition</b> <a href="#l00050">tree_234.cpp:50</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_node_html_ab4e5f7b7b260bb81d9441652cc124c74"><div class="ttname"><a href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ab4e5f7b7b260bb81d9441652cc124c74">data_structures::tree_234::Node::SetChild</a></div><div class="ttdeci">void SetChild(int8_t index, Node *child)</div><div class="ttdoc">Set child pointer to the position of index.</div><div class="ttdef"><b>Definition</b> <a href="#l00259">tree_234.cpp:259</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_node_html_ab654d7376d3449fdc78edab0e7fed06e"><div class="ttname"><a href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ab654d7376d3449fdc78edab0e7fed06e">data_structures::tree_234::Node::GetItemLeftChild</a></div><div class="ttdeci">Node * GetItemLeftChild(int8_t item_index)</div><div class="ttdoc">Get left child of item at item_index.</div><div class="ttdef"><b>Definition</b> <a href="#l00278">tree_234.cpp:278</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_node_html_ac6f619a1605cb46196360889fff4529e"><div class="ttname"><a href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ac6f619a1605cb46196360889fff4529e">data_structures::tree_234::Node::GetLeftmostChild</a></div><div class="ttdeci">Node * GetLeftmostChild()</div><div class="ttdoc">Get leftmose child of the current node.</div><div class="ttdef"><b>Definition</b> <a href="#l00271">tree_234.cpp:271</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_node_html_ad5219979ea9a8baa3a273a9ec0f0c670"><div class="ttname"><a href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad5219979ea9a8baa3a273a9ec0f0c670">data_structures::tree_234::Node::Node</a></div><div class="ttdeci">Node(int64_t item)</div><div class="ttdoc">Node constructor.</div><div class="ttdef"><b>Definition</b> <a href="#l00041">tree_234.cpp:41</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_node_html_ad5d6b6ce5fab21ccc88c6bf3153eee5d"><div class="ttname"><a href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad5d6b6ce5fab21ccc88c6bf3153eee5d">data_structures::tree_234::Node::children</a></div><div class="ttdeci">std::array&lt; Node *, 4 &gt; children</div><div class="ttdoc">store the children pointers</div><div class="ttdef"><b>Definition</b> <a href="#l00317">tree_234.cpp:317</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_node_html_ad632a0440295bc88ceadae7478fe0d37"><div class="ttname"><a href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#ad632a0440295bc88ceadae7478fe0d37">data_structures::tree_234::Node::GetChildIndex</a></div><div class="ttdeci">int8_t GetChildIndex(Node *child)</div><div class="ttdoc">Get the child&#39;s index of the children array.</div><div class="ttdef"><b>Definition</b> <a href="#l00237">tree_234.cpp:237</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_node_html_af564fd4b0992fff69f90de201542d3d1"><div class="ttname"><a href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#af564fd4b0992fff69f90de201542d3d1">data_structures::tree_234::Node::SetCount</a></div><div class="ttdeci">void SetCount(int8_t c)</div><div class="ttdoc">Set the item count of the node.</div><div class="ttdef"><b>Definition</b> <a href="#l00061">tree_234.cpp:61</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_node_html_afd9f83e2d5d7f22f79c1348e98914631"><div class="ttname"><a href="../../dd/d40/classdata__structures_1_1tree__234_1_1_node.html#afd9f83e2d5d7f22f79c1348e98914631">data_structures::tree_234::Node::Is2Node</a></div><div class="ttdeci">bool Is2Node()</div><div class="ttdoc">Check if node is a 2-node.</div><div class="ttdef"><b>Definition</b> <a href="#l00079">tree_234.cpp:79</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_tree234_html"><div class="ttname"><a href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html">data_structures::tree_234::Tree234</a></div><div class="ttdoc">2-3-4 tree class</div><div class="ttdef"><b>Definition</b> <a href="#l00323">tree_234.cpp:323</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_tree234_html_a07811b3c564a3a443b106c9aa717629d"><div class="ttname"><a href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a07811b3c564a3a443b106c9aa717629d">data_structures::tree_234::Tree234::InsertPreSplit</a></div><div class="ttdeci">void InsertPreSplit(int64_t item)</div><div class="ttdoc">A insert implementation of pre-split.</div><div class="ttdef"><b>Definition</b> <a href="#l00585">tree_234.cpp:585</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_tree234_html_a11f0d016dff7f7e62b3dddb9fdf47805"><div class="ttname"><a href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a11f0d016dff7f7e62b3dddb9fdf47805">data_structures::tree_234::Tree234::MergeNode</a></div><div class="ttdeci">Node * MergeNode(Node *dst_node, Node *node)</div><div class="ttdoc">A helper function used during post-merge insert.</div><div class="ttdef"><b>Definition</b> <a href="#l00700">tree_234.cpp:700</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_tree234_html_a273511e84a5243ffffe81be28bd24855"><div class="ttname"><a href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a273511e84a5243ffffe81be28bd24855">data_structures::tree_234::Tree234::DeleteNode</a></div><div class="ttdeci">void DeleteNode(Node *tree)</div><div class="ttdoc">Recursive release the tree.</div><div class="ttdef"><b>Definition</b> <a href="#l00547">tree_234.cpp:547</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_tree234_html_a2e9a9db7792cf5383f4c4cc418255165"><div class="ttname"><a href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a2e9a9db7792cf5383f4c4cc418255165">data_structures::tree_234::Tree234::Print</a></div><div class="ttdeci">void Print(const char *file_name=nullptr)</div><div class="ttdoc">Print tree into a dot file.</div><div class="ttdef"><b>Definition</b> <a href="#l01131">tree_234.cpp:1131</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_tree234_html_a348ea76c7629b2dcf740be062f970a36"><div class="ttname"><a href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a348ea76c7629b2dcf740be062f970a36">data_structures::tree_234::Tree234::root_</a></div><div class="ttdeci">Node * root_</div><div class="ttdoc">root node of the tree</div><div class="ttdef"><b>Definition</b> <a href="#l00538">tree_234.cpp:538</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_tree234_html_a36f4d5f603f7edb7db7c73fb53ba14e9"><div class="ttname"><a href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a36f4d5f603f7edb7db7c73fb53ba14e9">data_structures::tree_234::Tree234::Merge</a></div><div class="ttdeci">Node * Merge(Node *parent, int8_t index)</div><div class="ttdoc">Merge the item at index of the parent node, and its left and right child.</div><div class="ttdef"><b>Definition</b> <a href="#l00895">tree_234.cpp:895</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_tree234_html_a370b625ca9f16bbef2b65e024ef78ea9"><div class="ttname"><a href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a370b625ca9f16bbef2b65e024ef78ea9">data_structures::tree_234::Tree234::SplitNode</a></div><div class="ttdeci">Node * SplitNode(Node *node)</div><div class="ttdoc">Split a 4-node to 1 parent and 2 children, and return the parent node.</div><div class="ttdef"><b>Definition</b> <a href="#l00745">tree_234.cpp:745</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_tree234_html_a5da1be3f5b5d967ebb36a201f3ebad11"><div class="ttname"><a href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a5da1be3f5b5d967ebb36a201f3ebad11">data_structures::tree_234::Tree234::Remove</a></div><div class="ttdeci">bool Remove(int64_t item)</div><div class="ttdoc">Remove item from tree.</div><div class="ttdef"><b>Definition</b> <a href="#l00929">tree_234.cpp:929</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_tree234_html_a61dd051a74e5f36c8dc03dae8dca6ef4"><div class="ttname"><a href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a61dd051a74e5f36c8dc03dae8dca6ef4">data_structures::tree_234::Tree234::RemovePreMerge</a></div><div class="ttdeci">bool RemovePreMerge(Node *node, int64_t item)</div><div class="ttdoc">Main function implement the pre-merge remove operation.</div><div class="ttdef"><b>Definition</b> <a href="#l00937">tree_234.cpp:937</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_tree234_html_a65a1235659356166a3e9b451c64fcc36"><div class="ttname"><a href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a65a1235659356166a3e9b451c64fcc36">data_structures::tree_234::Tree234::GetTreeMinItem</a></div><div class="ttdeci">int64_t GetTreeMinItem(Node *tree)</div><div class="ttdoc">Get the min item of the tree.</div><div class="ttdef"><b>Definition</b> <a href="#l01115">tree_234.cpp:1115</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_tree234_html_a6749ebb40710c9752a2771eda03c6b3e"><div class="ttname"><a href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a6749ebb40710c9752a2771eda03c6b3e">data_structures::tree_234::Tree234::Insert</a></div><div class="ttdeci">void Insert(int64_t item)</div><div class="ttdoc">Insert item to tree.</div><div class="ttdef"><b>Definition</b> <a href="#l00655">tree_234.cpp:655</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_tree234_html_a84ab7b4fe7442b5e2eeed8c050bb86bd"><div class="ttname"><a href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#a84ab7b4fe7442b5e2eeed8c050bb86bd">data_structures::tree_234::Tree234::Traverse</a></div><div class="ttdeci">void Traverse()</div><div class="ttdoc">In-order traverse.</div><div class="ttdef"><b>Definition</b> <a href="#l00562">tree_234.cpp:562</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_tree234_html_aa7e5e00033f38006a224f30bdbf3f703"><div class="ttname"><a href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#aa7e5e00033f38006a224f30bdbf3f703">data_structures::tree_234::Tree234::InsertPostMerge</a></div><div class="ttdeci">void InsertPostMerge(int64_t item)</div><div class="ttdoc">A insert implementation of post-merge.</div><div class="ttdef"><b>Definition</b> <a href="#l00637">tree_234.cpp:637</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_tree234_html_ac5361479dd996eb331759f33808657d9"><div class="ttname"><a href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#ac5361479dd996eb331759f33808657d9">data_structures::tree_234::Tree234::TryLeftRotate</a></div><div class="ttdeci">bool TryLeftRotate(Node *parent, Node *to_child)</div><div class="ttdoc">A handy function to try if we can do a left rotate to the target node.</div><div class="ttdef"><b>Definition</b> <a href="#l00778">tree_234.cpp:778</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_tree234_html_ac85ba5abfd6d34dcd908b2afe6464657"><div class="ttname"><a href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#ac85ba5abfd6d34dcd908b2afe6464657">data_structures::tree_234::Tree234::GetTreeMaxItem</a></div><div class="ttdeci">int64_t GetTreeMaxItem(Node *tree)</div><div class="ttdoc">Get the max item of the tree.</div><div class="ttdef"><b>Definition</b> <a href="#l01098">tree_234.cpp:1098</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_tree234_html_ad37e29e2a4a6cc0eb65cbd5595e1da95"><div class="ttname"><a href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#ad37e29e2a4a6cc0eb65cbd5595e1da95">data_structures::tree_234::Tree234::MergeNodeNotFull</a></div><div class="ttdeci">void MergeNodeNotFull(Node *dst_node, Node *node)</div><div class="ttdoc">Merge node to a not-full target node.</div><div class="ttdef"><b>Definition</b> <a href="#l00730">tree_234.cpp:730</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_tree234_html_ae58dca20f08eaf9313f6e7b0869c2d0e"><div class="ttname"><a href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#ae58dca20f08eaf9313f6e7b0869c2d0e">data_structures::tree_234::Tree234::LeftRotate</a></div><div class="ttdeci">void LeftRotate(Node *parent, int8_t index)</div><div class="ttdoc">Do the actual left rotate operation.</div><div class="ttdef"><b>Definition</b> <a href="#l00869">tree_234.cpp:869</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_tree234_html_ae68f8e62be02657c1287def6b38d7cc9"><div class="ttname"><a href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#ae68f8e62be02657c1287def6b38d7cc9">data_structures::tree_234::Tree234::RightRotate</a></div><div class="ttdeci">void RightRotate(Node *parent, int8_t index)</div><div class="ttdoc">Do the actual right rotate operation.</div><div class="ttdef"><b>Definition</b> <a href="#l00845">tree_234.cpp:845</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_tree234_html_aec0642d1d151521ca7c70ea85cdb15d3"><div class="ttname"><a href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#aec0642d1d151521ca7c70ea85cdb15d3">data_structures::tree_234::Tree234::TryRightRotate</a></div><div class="ttdeci">bool TryRightRotate(Node *parent, Node *to_child)</div><div class="ttdoc">A handy function to try if we can do a right rotate to the target node.</div><div class="ttdef"><b>Definition</b> <a href="#l00813">tree_234.cpp:813</a></div></div>
<div class="ttc" id="aclassdata__structures_1_1tree__234_1_1_tree234_html_af260f0760344771bf8fce4fc9b1739be"><div class="ttname"><a href="../../d3/d95/classdata__structures_1_1tree__234_1_1_tree234.html#af260f0760344771bf8fce4fc9b1739be">data_structures::tree_234::Tree234::PrintNode</a></div><div class="ttdeci">void PrintNode(std::ofstream &amp;ofs, Node *node, int64_t parent_index, int64_t index, int8_t parent_child_index)</div><div class="ttdoc">Print the tree to a dot file. You can convert it to picture with graphviz.</div><div class="ttdef"><b>Definition</b> <a href="#l01226">tree_234.cpp:1226</a></div></div>
<div class="ttc" id="adsu__path__compression_8cpp_html_a45d94ead4cf4e1ff9f87c38bc99f59ae"><div class="ttname"><a href="../../d3/dae/dsu__path__compression_8cpp.html#a45d94ead4cf4e1ff9f87c38bc99f59ae">test2</a></div><div class="ttdeci">static void test2()</div><div class="ttdoc">Self-implementations, 2nd test.</div><div class="ttdef"><b>Definition</b> <a href="../../d3/dae/dsu__path__compression_8cpp_source.html#l00187">dsu_path_compression.cpp:187</a></div></div>
<div class="ttc" id="agenerate__parentheses_8cpp_html_gae66f6b31b5ad750f1fe042a706a4e3d4"><div class="ttname"><a href="../../dd/d1e/generate__parentheses_8cpp.html#gae66f6b31b5ad750f1fe042a706a4e3d4">main</a></div><div class="ttdeci">int main()</div><div class="ttdoc">Main function.</div><div class="ttdef"><b>Definition</b> <a href="../../dd/d1e/generate__parentheses_8cpp_source.html#l00110">generate_parentheses.cpp:110</a></div></div>
<div class="ttc" id="anamespacedata__structures_html"><div class="ttname"><a href="../../d5/d3c/namespacedata__structures.html">data_structures</a></div><div class="ttdoc">for IO operations</div></div>
<div class="ttc" id="anamespacetree__234_html"><div class="ttname"><a href="../../d6/dab/namespacetree__234.html">tree_234</a></div><div class="ttdoc">Functions for 234 tree</div></div>
<div class="ttc" id="astructnode_html"><div class="ttname"><a href="../../d5/da1/structnode.html">node</a></div><div class="ttdef"><b>Definition</b> <a href="../../d3/d26/binary__search__tree_8cpp_source.html#l00011">binary_search_tree.cpp:11</a></div></div>
<div class="ttc" id="atree__234_8cpp_html_ae7880ce913f3058a35ff106d5be9e243"><div class="ttname"><a href="../../db/dbc/tree__234_8cpp.html#ae7880ce913f3058a35ff106d5be9e243">test1</a></div><div class="ttdeci">static void test1()</div><div class="ttdoc">simple test to insert a given array and delete some item, and print the tree</div><div class="ttdef"><b>Definition</b> <a href="#l01263">tree_234.cpp:1263</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a href="../../dir_2e746e9d06bf2d8ff842208bcc6ebcfc.html">data_structures</a></li><li class="navelem"><a href="../../db/dbc/tree__234_8cpp.html">tree_234.cpp</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="../../doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.14.0 </li>
</ul>
</div>
</body>
</html>