简体   繁体   English

“排序”树数据结构

[英]“Sorting” a Tree Data Structure

I made a Tree Data Structure and I want the Elements to sort like this: 我创建了一个树数据结构,我希望元素排序如下:

      10
     /  \
    5    12
   / \   / \
  3   7 11  18

If the value of the added element is smaller than the value of the other element, it should be linked left, and if bigger, right. 如果添加的元素的值小于另一个元素的值,则应将其链接到左侧,如果较大,则应链接到右侧。 My problem is, that I just can't get the sorting method right. 我的问题是,我无法正确选择排序方法。

class Tree
{
    private class TElement
    {
        public int _value;
        public TElement _left;
        public TElement _right;

        public TElement(int value)
        {
            _value = value;
        }
    }

    private TElement RootElement;

    public void Add(int value)
    {
        TElement newElement = new TElement(value);
        TElement current = new TElement(value);
        current = RootElement;
        if (RootElement == null)
        {
            RootElement = newElement;
            return;
        }

        SortNewElement(RootElement, RootElement, newElement, RootElement);
    }

    private void SortNewElement(TElement left, TElement right, TElement newElement, TElement RootElement)
    {
        if (newElement._value < RootElement._value && RootElement._left == null)
        {
            left._left = newElement;
            return;
        }

        if (newElement._value > RootElement._value && RootElement._right == null)
        {
            right._right = newElement;
            return;
        }


        if (newElement._value < left._value && left._left == null)
        {
            left._left = newElement;
            return;
        }

        if (newElement._value > right._value && right._right == null)
        {
            right._right = newElement;
            return;
        }

        SortNewElement(left._left, right._right, newElement, RootElement);
    }      
}

I know it doesn't work because it's trying to get the linked nodes of a null element. 我知道它不起作用,因为它试图获取null元素的链接节点。

From what i can understand from your question you are just trying to insert a new node in a binary search tree. 从我可以从您的问题中了解到,您只是想在二进制搜索树中插入一个新节点。 Its inorder traversal will be a sorted array. 它的有序遍历将是一个排序数组。

You can do so by the following simple pseudo code 您可以通过以下简单的伪代码来实现

   insert_new( Node* node, value)
    {

    if(value > node->value)
    {
       if(node->right != null)
       {
         insert_new(node->right,value);
       }
       else
       {
         node->right = new Node(value);
         return;
       } 
   }
   else
   {
      if(node->left != null)
      {
       insert_new(node->left,value)
      }
      else
      {
       node->left = new Node(value);
       return;          
      } 
   }
}
class element{
public:
int value;
   *element left;
   *element right;

   element(int value)
      value = value;

public add(&element a)
   if (a != null)
      {
      if (left!=null){
            left = a;
      }
      else{
         if (left.value > a.value){
             right = left;
             left= a;
         }
         else{
             right=a;
         }

   }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM