void CreateTree( int lo, int hi, int root, bool left ) {
    int pivotIndex, tmpIndex;
//printf( "l:%d     h:%d\n", lo, hi);
    if ( lo >= hi )
        return ;

    for ( int i = lo; i < hi; ++i ) {
        if ( inOrder[i] == postOrder[pivotCnt] ) {
            pivotIndex = i;
            --pivotCnt;
            break;
        }
    }

    tmpIndex = ++f**k;

    tree[tmpIndex].val         = inOrder[pivotIndex];
    tree[tmpIndex].parentIndex = root;
    if ( left )
        tree[root].lChildIndex = tmpIndex;
    else
        tree[root].rChildIndex = tmpIndex;

    CreateTree( pivotIndex + 1, hi, tmpIndex, true );
    CreateTree( lo, pivotIndex, tmpIndex, false );


    return ;
}
	TreeNode * CreateTree(ListNode* node,int len)
	{
		if( len == 1)
		{
			TreeNode * t = new TreeNode(node->val);
			t->right = t->left = NULL;
			allNodes.push_back(t);
			return t;
		}
		else
		{
			ListNode * cur= node;
			int i = 1;
			do
			{
				node = node->next;
			}while(++i <= len/2);
			TreeNode * t = new TreeNode(node->val);

			t->left = CreateTree(cur,len/2);
			if(len-len/2-1== 0)
				t->right = NULL;
			else
				t->right = CreateTree(node->next,len-len/2-1);
			allNodes.push_back(t);
			return t;

		}
	}
示例#3
0
 void main()
 {
   int i;
   PTree T,p;
   TElemType e,e1;
   InitTree(T);
   printf("构造空树后,树空否? %d(1:是 0:否) 树根为%c 树的深度为%d\n",TreeEmpty(T),Root(T),TreeDepth(T));
   CreateTree(T);
   printf("构造树T后,树空否? %d(1:是 0:否) 树根为%c 树的深度为%d\n",TreeEmpty(T),Root(T),TreeDepth(T));
   printf("层序遍历树T:\n");
   TraverseTree(T,vi);
   printf("请输入待修改的结点的值 新值: ");
   scanf("%c%*c%c%*c",&e,&e1);
   Assign(T,e,e1);
   printf("层序遍历修改后的树T:\n");
   TraverseTree(T,vi);
   printf("%c的双亲是%c,长子是%c,下一个兄弟是%c\n",e1,Parent(T,e1),LeftChild(T,e1),RightSibling(T,e1));
   printf("建立树p:\n");
   InitTree(p);
   CreateTree(p);
   printf("层序遍历树p:\n");
   TraverseTree(p,vi);
   printf("将树p插到树T中,请输入T中p的双亲结点 子树序号: ");
   scanf("%c%d%*c",&e,&i);
   InsertChild(T,e,i,p);
   Print(T);
   printf("删除树T中结点e的第i棵子树,请输入e i: ");
   scanf("%c%d",&e,&i);
   DeleteChild(T,e,i);
   Print(T);
 }
示例#4
0
void Properties::ParseList(QTreeWidgetItem* node, const IterableT& seq) {
  typename IterableT::const_iterator it, itEnd = seq.end();
  int i = 0;
  // skip 1 sized arrays
  if (seq.size() == 0) {
    // empty
    if (node)
      node->setData(1, Qt::DisplayRole, "<empty>");
  } else if (seq.size() == 1) {
    CreateTree(node, seq.first());
    if (node)
      node->setData(1, Qt::DisplayRole, GetSummary("[0]", seq.first()));
  } else {
    for (it = seq.begin(); it != itEnd; ++it) {
      QTreeWidgetItem* child = new QTreeWidgetItem();
      QString key = QString("[%1]").arg(i++);
      child->setData(0, Qt::DisplayRole, key);
      child->setData(1, Qt::DisplayRole, GetSummary(key, *it));
      CreateTree(child, *it);

      if (node)
        node->addChild(child);
      else
        ui->propertyView->addTopLevelItem(child);
    }
  }
}
示例#5
0
文件: BlockArt.cpp 项目: SamJia/Oj
void CreateTree(Node *p) {
	if (p->low_ < p->high_) {
		p->left_ = new Node(p->low_, (p->low_ + p->high_) / 2);
		CreateTree(p->left_);
		p->right_ = new Node((p->low_ + p->high_) / 2 + 1, p->high_);
		CreateTree(p->right_);
	}
}
示例#6
0
Node* CreateTree(It begin, It end) {
    if (end - begin == 0) {
        return nullptr;
    }
    Iterator middle = begin + (end - begin) / 2; // Should I be afraid of (from < to)?
    Node* root = new Node(*middle);
    root->left = CreateTree(begin, middle);
    root->right = CreateTree(middle + 1, end);
    return root;
}
示例#7
0
SearchTree CreateTree(SearchTree T) {
	int temp;
	scanf("%d", &temp);
	if(temp == -1)
		T = NULL;
	else {
		T = (SearchTree)malloc(sizeof(TreeNode));
		T->data = temp;
		T->left	= CreateTree(T->left);
		T->right = CreateTree(T->right);
	}
	return T;
}
//先序拓展建立二叉树
void CreateTree(BiTree &T)
{
    T = (BiNode*) malloc (sizeof(BiNode));
    printf("Enter the data \n");
    scanf("%c ",&T->data);
    if(T->data == '#') T == NULL;
    if(T)
    {
        printf("");
        CreateTree(T->lch);
        CreateTree(T->rch);
    }
}
示例#9
0
void MyGameTreeCtrl::RefreshTree(string* pstrPanelName)
{
	m_mapNode.clear();
	CreateTree();
	m_bInsertData = true;
	EnsureVisible(GetRootItem());
}
示例#10
0
CreateTree(BTree &T)   //必须声明为指针的指针(BTree *T)或者指针的引用 (BTree &T) 因为有 NULL指针; 
{
	char c;
	scanf("%c",&c);
	if(c ==' ')
	{
		T = NULL;
	}
	else
	{
		T = (BTree)malloc(sizeof(BNode));
		(T)->data = c;
		CreateTree((T)->lchild);
		CreateTree((T)->rchild);	
	} 
 } 
void COptionTreeWrapper::Serialize(CHashString objName, vector<CHashString> objTypes, IArchive &ar, bool bRead)
{
	if (m_mTrees[objName.GetUniqueID()].m_Tree == NULL)
	{
		m_mTrees[objName.GetUniqueID()].m_Tree = new COptionTree();
		m_mTrees[objName.GetUniqueID()].m_Tree->Create(m_Style, m_Rect, m_pParentWnd, m_TreeOptions, m_ID);
		m_mTrees[objName.GetUniqueID()].m_Root = m_mTrees[objName.GetUniqueID()].m_Tree->InsertItem(new COptionTreeItem());		
		CString label;
		label = objName.GetString();
		label += _T("(");
		label += objTypes[0].GetString();
		label += _T(")");
		m_mTrees[objName.GetUniqueID()].m_Root->SetLabelText(label);
		for (UINT i=0; i<objTypes.size(); i++)
		{
			CreateTree(objTypes[i].GetString(), objName);
		}
		m_vRootNames.push_back(objName);
	}
	if (bRead)
	{
		SerializeIn(ar, objName);
	}
	else
	{
		SerializeOut(ar, objName);
	}
	ExpandOneRoot(objName);
}
示例#12
0
void TEST_HUFMAN()
{
	freopen("input.txt", "r", stdin);
	int n;   //需要编码的字符的个数

	scanf("%d", &n);

	int i;
	int *wet = (int *)malloc(n * sizeof(int));  //存放每个字符的权值
	for (i = 0; i<n; i++)
	{
		scanf("%d", wet + i);
	}

	HUffmanCode HC;  //保存赫夫曼编码
	HuffmanTree HT = CreateTree(wet, n);  //生成赫夫曼树
	HufmanCoding(HT, HC, n);        //求每个字符的赫夫曼编码

	printf("哈夫曼编码如下:\n");
	for (i = 0; i<n; i++)
	{
		puts(HC[i]);
	}
	free(wet);
}
示例#13
0
文件: dir.c 项目: taysom/tau
static void TreeTest (void)
{
	DirEntry_s *root;
	root = CreateTree(4, 9, 0);
	PrintTree(root, 0);
	DeleteTree(root);
}
示例#14
0
BiTree CreateTree()
{
   BiTree T;
   char ch;
   scanf("%c",&ch);
   if(ch=='#') T=NULL;
   else
   {
      T=(BiTree)malloc(sizeof(BiTNode));
      if(!T) exit(0);
      T->data=ch;
      T->lchild=CreateTree();
      T->rchild=CreateTree();
   }
   return T;
}
示例#15
0
	/* 
	 *	Collision Tree
	 */
	CollisionTree::CollisionTree(const sf::FloatRect & i_SubRect, const ubyte i_MaxObjects, const ubyte i_TreeDeep)
		:m_TreeDeep(i_TreeDeep), m_CurrentDeep(1), m_NodeBox(i_SubRect), m_NodeCapacity(i_MaxObjects), m_IsLeaf(true)
	{
		m_SubNodes[0] = m_SubNodes[1] = m_SubNodes[2] = m_SubNodes[3] = nullptr;
		// Create the tree
		CreateTree();
	}
示例#16
0
KeyTextList* LoadKeyTextList(gchar* filename)
{
	KeyTextList* list;
	gchar* pathname = NULL;

	if( !g_keytext_dir || !filename )
		return NULL;

	if( (pathname = CheckFileExists(g_keytext_dir, filename)) == NULL )
		if( (pathname = CheckFileExists("keytext", filename)) == NULL )
			return NULL;

	list = (KeyTextList*)g_malloc(sizeof(KeyTextList));

	if( list != NULL )
	{
		if( (list->tree = CreateTree()) != NULL )
		{
			if( ReadXMLFile(pathname, list->tree) )
			{
				return list;
			}
			FreeTree(list->tree);
		}
		g_free(list);
	}
	return NULL;
}
示例#17
0
short LoadKeyTextList( void )
{
	KeyTextList* list;
	char* pathname = NULL;
	short  result = -1;

	if( !g_keytext_dir  ) goto Err1; 

	if( (pathname = CheckFileExists(g_keytext_dir, CNIJLGMON2_RESFILE)) == NULL ){
		if( (pathname = CheckFileExists("keytext", CNIJLGMON2_RESFILE)) == NULL )  goto Err1;
	}

	if ( (list = (KeyTextList*)malloc(sizeof(KeyTextList))) == NULL ) goto Err1;

	if( (list->tree = CreateTree()) == NULL ) goto Err2;

	if( ReadXMLFile(pathname, list->tree) != 0 ) goto Err3;

	g_key_keytext_list = list;

	result = 0;
	return result;
Err3:
	FreeStringList( list->tree );
Err2:
	free( list );
Err1:
	return result;
}
示例#18
0
//-----------------------------------------------------------------------------
HTREEITEM CDlgLayerTree::CreateTree(CString sName, HTREEITEM hParent /*= TVI_ROOT*/)
{
	HTREEITEM hReTI = m_tree.InsertItem(sName, hParent);

	CStringArray strChildNameArray,strNeedArray;
	if (CLayerTreeDef::GetChildrenAliasName(strChildNameArray, strNeedArray, sName))
	{
		for (int i = strChildNameArray.GetSize() - 1; i >= 0; i--)
		{
			CString Right;
			CPowerConfig::GetRightByResource(strChildNameArray.GetAt(i), Right);
			int nRight = atoi(Right);
			if (!(nRight & POWER_SCAN))// 对比查看权限
			{
				//strChildNameArray.RemoveAt(i);///////////////////////////////##############################
			}
		}
		for (int i = 0; i < strChildNameArray.GetSize(); i++)
		{
			HTREEITEM hTI = CreateTree(strChildNameArray.GetAt(i), hReTI);
			CString sTmp = strNeedArray.GetAt(i);
			if (!sTmp.IsEmpty() && sTmp.CollateNoCase("0") != 0 && hTI != NULL)
			{
				SetTreeCheck(hTI);
				m_SdeAliasNames.Add(strChildNameArray.GetAt(i));
			}
		}
	}

	return hReTI;
}
示例#19
0
文件: avl.c 项目: Yu-Yan/C
Tree Insert(int x, Tree T)
{
	if (T == NULL)
		T = CreateTree(x);
	else if (x < T->element)
	{
		T->left = Insert(x, T->left);
		if (Height(T->left) - Height(T->right) == 2)
		{
			if (x < T->left->element)
				T = SingleRotateLeft(T);
			else
				T = DoubleRotateLeft(T);
		}
	}
	else if (x > T->element)
	{
		T->right = Insert(x, T->right);
		if (Height(T->right) - Height(T->left) == 2)
		{
			if (x > T->right->element)
				T = SingleRotateRight(T);
			else
				T = DoubleRotateRight(T);
		}
	}
	T->height = (Height(T->left) > Height(T->right) ? Height(T->left) : Height(T->right)) + 1;
	return T;
}
示例#20
0
文件: main.c 项目: Cxd2014/DataStruct
int main(int argc, char const *argv[])
{
	//int err;
	struct Tree *T;
	char *ch = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
	T = CreateTree(ch);

	printf("递归先序遍历\n");
	PreOrderTraverse(T);
	printf("\n");

	printf("递归中序遍历\n");
	InOrderTraverse(T);
	printf("\n");

	printf("递归后序遍历\n");
	PostOrderTraverse(T);
	printf("\n");

	printf("非递归先序遍历\n");
	PreOrderTraverseStack(T);
	printf("\n");

	printf("非递归中序遍历\n");
	InOrderTraverseStack(T);
	printf("\n");

	printf("非递归后序遍历\n");
	PostOrderTraverseStack(T);
	printf("\n");
	return 0;
}
示例#21
0
void HuffmanTreeTest() {
	int i,n=4,m;
	char test[]="DBDBDABDCDADBDADBDADACDBDBD";
	char code[100],code1[100];
	char alphabet[]={'A','B','C','D'};
	int w[]={5,7,2,13} ;
	HuffmanTree *ht;
	HuffmanCode *hc;
	m=2*n-1;

	ht=(HuffmanTree *)malloc((m+1)*sizeof(HuffmanTree));
	if(!ht)  {
		printf("内存分配失败!\n");
		exit(0);
	}

	hc=(HuffmanCode *)malloc(n*sizeof(char*));
	if(!hc) {
		printf("内存分配失败!\n");
		exit(0);
	}

	CreateTree(ht,n,w);
	HuffmanCoding(ht,n,hc);
	for(i=1;i<=n;i++)
		printf("字母:%c,权重:%d,编码为 %s\n",alphabet[i-1],ht[i].weight,hc[i-1]);

	Encode(hc,alphabet,test,code);
	printf("\n字符串:\n%s\n转换后为:\n%s\n",test,code);

	Decode(ht,n,code,alphabet,code1);
	printf("\n编码:\n%s\n转换后为:\n%s\n",code,code1);
}
//------------------------------------------------------------------------------
int main(){
    auto list = CreateList( std::vector<int>( {1,2,3,4,5} ) );

    std::cout << PrintList( list ) << std::endl;
    std::cout << PrintBackList( list ) << std::endl;

    auto listA = CreateList( std::vector<int>( {1,2,3,} ) );
    auto listB = CreateList( std::vector<int>( {4,5} ) );

    auto ab = Append( listA, listB );

    std::cout << PrintList( ab ) << std::endl;

    auto tree = CreateTree( std::vector<int>( {4,2,1,3,5} ) );

    std::cout << PrintTree( tree ) << std::endl;

    auto treelist = TreeToList( tree );

    std::cout << PrintList( treelist ) << std::endl;

    TestRandomTree();

    return EXIT_SUCCESS;
}
示例#23
0
int main(int argc, char **argv)
{
	CSTree T;
	TElemType e;
	TElemType e1;
	InitTree(&T);
	printf("构造空树后,树空否? %d(1:是 0:否) 树根为%c 树的深度为%d\n",\
			TreeEmpty(T), Root(T), TreeDepth(T));
	CreateTree(&T);
	printf("构造空树后,树空否? %d(1:是 0:否) 树根为%c 树的深度为%d\n",\
				TreeEmpty(T), Root(T), TreeDepth(T));
	printf("先根遍历树T:\n");
	PreOrderTraverse(T, vi);
	printf("\n请输入等修改的结点的值 新值:");
	scanf("%c%*c%c%*c", &e, &e1);
	Assign(&T, e, e1);
	printf("后根遍历修改后的树T:\n");
	PostOrderTraverse_recurssion1(T, vi);
	printf("\n");
	printf("PostOrderTraverse_recurssion1 complete!\n");
	PostOrderTraverse_recurssion2(T, vi);
	printf("\n");
	printf("PostOrderTraverse_recurssion2 complete!\n");
	printf("\n%c的双亲是%c, 长子是%c,下一个兄弟是%c\n", e1, Parent(T, e1),\
			LeftChild(T, e1), RightSibling(T, e1));
	printf("层序遍历树:\n");
	LevelOrderTraverse(T, vi);
	DestroyTree(&T);
	return EXIT_SUCCESS;
}
示例#24
0
void Create(int fract)
{
    switch(fract) {
    case TREE:
        CreateTree();
        break;
    }
}
示例#25
0
int main()
{
    BiTree T;
    T=CreateTree();
    InOrderTraverse(T);

    return 0;
}
示例#26
0
文件: ds.c 项目: rollrat/old-library
void tree_pushleft(ptree tree, ULONG type, char *data)
{
	ptree _New = CreateTree();
	tree->_Left = _New;
	_New->_Parent = tree;
	_New->data = data;
	_New->type = type;
}
示例#27
0
SpatialGraphKDNode* SpatialGraph::CreateTree(int depth, const BoundingBox& bbox, SpatialGraphKDNode* parent, int index)
{
	SpatialGraphKDNode* node = new SpatialGraphKDNode(bbox, parent);
	node->Tree = this;
	node->bBlocked = false;

	//query physics to see if we're blocked
	node->bBlocked = IsBlocked( bbox );

	//Calculate my index
	if( parent )
	{
		node->Index = index;
	}
	else
	{
		node->Index = 0;
	}

	//Bail out if we reach max depth
	depth--;
	node->Depth = _depth - depth;
	if (depth > 0 && node->bBlocked )
	{
		BoundingBox LHSbbox, RHSbbox;
		MathUtil::SplitBoundingBox( bbox, (depth % 2) ? MathUtil::AA_X : MathUtil::AA_Y, LHSbbox, RHSbbox );
		node->LHC = CreateTree(depth, LHSbbox, node, node->Index << 1);
		node->RHC = CreateTree(depth, RHSbbox, node, (node->Index << 1) + 1);

		int iMask = ~(0xFFFFFFFF << depth );
		//If I have children, pad my index
		node->Index = (node->Index << depth) | iMask;

		//If all my children are blocked, then destroy my children
		if( IsFullyBlocked(node) )
		{
			DeleteNode( node->LHC );
			node->LHC = NULL;
			DeleteNode( node->RHC );
			node->RHC = NULL;
		}
	}

	return node;
}
示例#28
0
//---------------------------------------------------------------------------
// Class TApp
//---------------------------------------------------------------------------
void TApp::Init(){

   // Uncoment one of the page manager creation procedures. Do not uncoment both
   // of them.
    CreateDiskPageManager(); // To create it in disk
   //CreateMemoryPageManager(); // To create it in memory
   // Creates the tree
   CreateTree();
}//end TApp::Init
bool pawsConfigCamera::Initialize()
{
    psengine->GetPSCamera()->LoadFromFile(false,false);
    if (!CreateTree())
        return false;

    UseBorder("line");
    return true;
}
示例#30
0
int main() {
	SearchTree T;
	T = CreateTree(T);
//	Print(T);
	TreeNode* node = Find(T, 4);
	printf("%d ", node->data);
	printf("\n");
	return 0;
}