コード例 #1
0
ファイル: binaryTreeSorted.cpp プロジェクト: mafiya69/ds
  NodePtr Add(T elem)
  {
    auto pos = TreeSearch(elem, root, root);
    if(repeat)
      while(get<2>(pos))
	pos = TreeSearch(elem, get<0>(pos)->Right(false), get<0>(pos));
    else if(get<2>(pos))
      return get<0>(pos);
    NodePtr node = get<0>(pos);
    NodePtr nodePar = get<1>(pos);
    if(root == nullptr)
    {
      root.reset(new Node<T>(elem));
      return node;
    }
    else
    {	
	if(comp(elem, nodePar->elem))
	{
	  nodePar->Left(false).reset(new Node<T>(elem));
	  node = nodePar->Left();
	}
	else
	{
	  nodePar->Right(false).reset(new Node<T>(elem));
	  node = nodePar->Right();
	}
    }      
    return node;
  }
コード例 #2
0
ファイル: binaryTreeSorted.cpp プロジェクト: mafiya69/ds
 tuple<NodePtr, NodePtr, bool>
 TreeSearch(T elem, NodePtr node, NodePtr nodePar) const
 {
   if(node == nullptr)
     return make_tuple(node, nodePar, false);
   else if(elem == node->elem)
     return make_tuple(node, nodePar, true);
   else if(comp(elem, node->elem))
     return TreeSearch(elem, node->Left(false), node);
   else
     return TreeSearch(elem, node->Right(false), node);
 }    
コード例 #3
0
ファイル: binaryTreeSorted.cpp プロジェクト: mafiya69/ds
 void postorder(NodePtr node, int x = 0)
 {
   if(node != nullptr)
   {
     postorder(node->Left(false), x + 1);
     postorder(node->Right(false), x + 1);
   }
   for(int i = 0; i < x; ++i)
     cout<<"|  ";
   cout<<"|--"<<node<<endl;
   return;
 }
コード例 #4
0
ファイル: binaryTreeSorted.cpp プロジェクト: mafiya69/ds
 void inorderReverse(NodePtr node, int x = 0)
 {
   if(node != nullptr)
   {
     inorderReverse(node->Right(false), x + 1);
   }
   for(int i = 0; i < x; ++i)
     cout<<"|  ";
   cout<<"|--"<<node<<endl;
   if(node != nullptr)
   {
     inorderReverse(node->Left(false), x + 1);
   }
   return;
 }