关于二叉搜索树实现的问题
Question about implementation of binary search tree
我正在尝试学习 C# 中数据算法的基础知识,并且在实现以下 二叉搜索树 添加过程时,我无法理解以下内容:调用 tree1.add(20);
方法,在 while
循环的第一次迭代中,current.Data
的值是 50
,在循环的第二次迭代中,current.Data
的值相同] 变为 40。
为什么 current.Data
的值在第一次迭代后没有停留在值 50 以及 current.Data
接收值 40 的过程是什么?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BinarySearchTree
{
public class Node
{
public int Data;
public Node LeftChild;
public Node RightChild;
}
public class BinarySearchTree
{
public Node root;
public BinarySearchTree()
{
root = null;
}
public void add(int data)
{
Node newNode = new Node();
newNode.Data = data;
if (root == null)
{
root = newNode;
}
else
{
Node current = root;
Node parent;
while (true)
{
parent = current;
if (data < current.Data)
{
current = current.LeftChild;
if (current == null)
{
parent.LeftChild = newNode;
break;
}
}
else
{
current = current.RightChild;
if (current == null)
{
parent.RightChild = newNode;
break;
}
}
}
}
}
}
class Program
{
static void Main(string[] args)
{
BinarySearchTree tree1 = new BinarySearchTree();
tree1.add(50);
tree1.add(40);
tree1.add(60);
tree1.add(20);
tree1.add(45);
tree1.add(55);
tree1.add(65);
Console.ReadLine();
}
}
}
答案就在这里:
while (true)
{
parent = current;
if (data < current.Data)
{
current = current.LeftChild; // THIS LINE
if (current == null)
{
parent.LeftChild = newNode;
break;
}
}
如您所见,电流正在重估,现在它是它自己的左侧 "child"。在前 3 add
次使用后,树应该如下所示:
50
/ \
40 60
所以第一次迭代 - 当前为 50,第二次迭代,它向左(BST 的定义)变为 40。下一次迭代 current 将包含 NULL
,(40 的左侧 child )并将放置在 BST 内。
我正在尝试学习 C# 中数据算法的基础知识,并且在实现以下 二叉搜索树 添加过程时,我无法理解以下内容:调用 tree1.add(20);
方法,在 while
循环的第一次迭代中,current.Data
的值是 50
,在循环的第二次迭代中,current.Data
的值相同] 变为 40。
为什么 current.Data
的值在第一次迭代后没有停留在值 50 以及 current.Data
接收值 40 的过程是什么?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace BinarySearchTree
{
public class Node
{
public int Data;
public Node LeftChild;
public Node RightChild;
}
public class BinarySearchTree
{
public Node root;
public BinarySearchTree()
{
root = null;
}
public void add(int data)
{
Node newNode = new Node();
newNode.Data = data;
if (root == null)
{
root = newNode;
}
else
{
Node current = root;
Node parent;
while (true)
{
parent = current;
if (data < current.Data)
{
current = current.LeftChild;
if (current == null)
{
parent.LeftChild = newNode;
break;
}
}
else
{
current = current.RightChild;
if (current == null)
{
parent.RightChild = newNode;
break;
}
}
}
}
}
}
class Program
{
static void Main(string[] args)
{
BinarySearchTree tree1 = new BinarySearchTree();
tree1.add(50);
tree1.add(40);
tree1.add(60);
tree1.add(20);
tree1.add(45);
tree1.add(55);
tree1.add(65);
Console.ReadLine();
}
}
}
答案就在这里:
while (true)
{
parent = current;
if (data < current.Data)
{
current = current.LeftChild; // THIS LINE
if (current == null)
{
parent.LeftChild = newNode;
break;
}
}
如您所见,电流正在重估,现在它是它自己的左侧 "child"。在前 3 add
次使用后,树应该如下所示:
50
/ \
40 60
所以第一次迭代 - 当前为 50,第二次迭代,它向左(BST 的定义)变为 40。下一次迭代 current 将包含 NULL
,(40 的左侧 child )并将放置在 BST 内。