Ejemplo n.º 1
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);
 }
Ejemplo n.º 2
0
int TreeDepth(Node* pRoot)
{
	if (nullptr == pRoot)
		return 0;
	else
		return 1 + max(TreeDepth(pRoot->pLeft), TreeDepth(pRoot->pRight));
}
Ejemplo n.º 3
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;
}
Ejemplo n.º 4
0
	int TreeDepth(TreeNode* pRoot)
	{
		if (!pRoot) return 0;

		int nLeft = TreeDepth(pRoot->left);
		int nRight = TreeDepth(pRoot->right);

		return nLeft > nRight ? nLeft + 1 : nRight + 1;
	}
bool TreeBalance(TreeElem *Tree)
{
	if (Tree != NULL)
	{
		bool res = (abs(TreeDepth(Tree->LeftSon) - TreeDepth(Tree->RightSon)) <= 1);
		return res && TreeBalance(Tree->LeftSon) && TreeBalance(Tree->RightSon);
	}
	else
		return true;
}
Ejemplo n.º 6
0
   int TreeDepth(TreeNode* pRoot)  
   {  
       if (pRoot == NULL)  
           return 0;  
 
       int nLeftDepth = TreeDepth(pRoot->left);  
       int nRightDepth = TreeDepth(pRoot->right);  
 
       return (nLeftDepth>nRightDepth)?(nLeftDepth+1):(nRightDepth+1);  
   } 
Ejemplo n.º 7
0
// ====================方法1====================
int TreeDepth(BinaryTreeNode* pRoot)
{
    if(pRoot == NULL)
        return 0;

    int nLeft = TreeDepth(pRoot->m_pLeft);
    int nRight = TreeDepth(pRoot->m_pRight);

    return (nLeft > nRight) ? (nLeft + 1) : (nRight + 1);
}
int TreeDepth(TreeElem *Tree)
{
	if (Tree != NULL)
	{
		int res = 0, a = TreeDepth(Tree->LeftSon), b = TreeDepth(Tree->RightSon);
		if (a >= b)
			return ++a;
		else
			return ++b;
	}
	else
		return  0;
}
Ejemplo n.º 9
0
bool IsBalanced_Solution1(BinaryTreeNode* pRoot)
{
    if(pRoot == NULL)
        return true;

    int left = TreeDepth(pRoot->m_pLeft);
    int right = TreeDepth(pRoot->m_pRight);
    int diff = left - right;
    if(diff > 1 || diff < -1)
        return false;

    return IsBalanced_Solution1(pRoot->m_pLeft) 
        && IsBalanced_Solution1(pRoot->m_pRight);
}
Ejemplo n.º 10
0
int TreeDepth(CSTree T)
{
	int max,l;
	if(T==NULL)
		return 0;
	else
	{
		max=0;
		max=TreeDepth(T->firstchild);
		l=TreeDepth(T->rightsibling);
		if(l>max)
			max=l;
		return max+1;
	}
}
Ejemplo n.º 11
0
void FindSum(Node* pNode, int nTargetSum)
{
	int nDepth = TreeDepth(pNode);
	vector< int > path(nDepth, 0);

	FindSum(pNode, path, nTargetSum, 0);
}
Ejemplo n.º 12
0
 vector<vector<int> > levelOrderBottom(TreeNode *root) {
     int depth = TreeDepth(root);
     vector<vector<int> > lot(depth);
     if(root == NULL)
         return lot;
     queue<TreeNode *> nodeQueue;  
     nodeQueue.push(root);
     TreeNode *node;
     queue<int> levelQueue;
     int level = 0;
     levelQueue.push(level);
     while(!nodeQueue.empty()){
         node = nodeQueue.front();
         nodeQueue.pop();
         level = levelQueue.front();
         levelQueue.pop();
         lot[depth - level -1].push_back(node->val);
         if(node->left){
             nodeQueue.push(node->left); 
             levelQueue.push(level+1);
         }
         if(node->right){
             nodeQueue.push(node->right);  
             levelQueue.push(level+1);
         }
         level++;
     }
     return lot;
 }
Ejemplo n.º 13
0
void main()
{
	int i;
	CSTree T, p, q;
	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");
	LevelOrderTraverse(T, visit);
	printf("请输入待修改的结点的值 新值:");
	scanf("%c%*c%c%*c", &e, &e1);
	Assign(T, e, e1);
	printf("层序遍历修改后的树T:\n");
	LevelOrderTraverse(T, visit);
	printf("%c的双亲是%c,长子是%c,下一个兄弟是%c。\n", e1, Parent(T, e1),
	       LeftChild(T, e1), RightSibling(T, e1));
	printf("建立树p:\n");
	CreateTree(p);
	printf("层序遍历树p:\n");
	LevelOrderTraverse(p, visit);
	printf("将树p插到树T中,请输入T中p的双亲结点 子树序号:");
	scanf("%c%d%*c", &e, &i);
	q = Point(T, e);
	InsertChild(T, q, i, p);
	printf("层序遍历修改后的树T:\n");
	LevelOrderTraverse(T, visit);
	printf("先根遍历树T:\n");
	PreOrderTraverse(T, visit);
	printf("\n后根遍历树T:\n");
	PostOrderTraverse(T, visit);
	printf("\n删除树T中结点e的第i棵子树,请输入e i:");
	scanf("%c%d", &e, &i);
	q = Point(T, e);
	DeleteChild(T, q, i);
	printf("层序遍历修改后的树T:\n");
	LevelOrderTraverse(T, visit);
	DestroyTree(T);
}
Ejemplo n.º 14
0
int main()
{
    const char *preOrder = "ABEHGCDFIJ";
    const char *inOrder = "BHEGADCIFJ";

    Bitree tree = InitTree(preOrder, inOrder);

    printf("back order: %s\n", CalcBackSequence(preOrder, inOrder));

    PreOrderTraverseRecursive(tree);
    printf("\n");

    PreOrderTraverseNonRecursive(tree);
    printf("\n");

    InOrderTraverseRecursive(tree);
    printf("\n");
    
    InOrderTraverseNonRecursive(tree);
    printf("\n");

    BackOrderTraverseRecursive(tree);
    printf("\n");

    BackOrderTraverseRecursive(tree);
    printf("\n");

    LayerOrderTraverse(tree);
    printf("\n");

    LayerOrderTraverse2(tree);
    printf("\n");

    printf("Layer0: ");
    TraverseLayer(tree, 0);
    printf("\n");

    printf("Layer3: ");
    TraverseLayer(tree, 3);
    printf("\n");

    printf("Layer5: ");
    TraverseLayer(tree, 5);
    printf("\n");

    printf("tree depth: %d\n", TreeDepth(tree));

    BitreeNode *parent = NearestParent(tree, 'D', 'J');
    if(parent)
        printf("nearest parent: %c\n", parent->data);

	printf("longest path in tree: %d\n", LongestPath(tree));
	printf("longest path in tree->rchild: %d\n", LongestPath(tree->rchild));
    return 0;
}
struct BinaryTreeNode{
	int value;
	BinaryTreeNode* p_left;
	BinaryTreeNode* p_right;
}

int TreeDepth(BinaryTreeNode* pRoot){
	if(pRoot == NULL)
		return 0;
	
	
	int left = TreeDepth(pRoot->left);
	int right = TreeDepth(pRoot->right);
	
	
	return (left > right) ? (left + 1) : (right + 1);
	
	
	
}
Ejemplo n.º 16
0
// ==================== Test Code ====================
void Test(char* testName, BinaryTreeNode* pRoot, int expected)
{
    if(testName != NULL)
        printf("%s begins: ", testName);
    
    int result = TreeDepth(pRoot);
    if(expected == result)
        printf("Test passed.\n");
    else
        printf("Test failed.\n");
}
Ejemplo n.º 17
0
int TreeDepth(CBTType *treeNode)        //计算二叉树深度
{
	int depleft,depright;

	if(treeNode == NULL)
	{
		return 0;            //对于空树,深度为0
	}
	else
	{
		depleft = TreeDepth(treeNode->left);  //左子树深度(递归调用)
		depright = TreeDepth(treeNode->right);  //右子树深度(递归调用)
		if(depleft>depright)
		{
			return depleft +1;
		}
		else{
			return depright + 1;
		}
	}
}
Ejemplo n.º 18
0
int TreeDepth(CSTree T)
{
	CSTree p;
	int depth, max = 0;

	if (!T)
		return 0;
	for (p = T->firstchild; p; p = p->nextsibling) {
		depth = TreeDepth(p);
		if (depth > max)
			max = depth;
	}
	return max + 1;
}
Ejemplo n.º 19
0
 void main()
 {
   int i;
   CSTree T,p,q;
   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");
   PreOrderTraverse(T,vi);
   printf("\n请输入待修改的结点的值 新值: ");
   scanf("%c%*c%c%*c",&e,&e1);
   Assign(&T,e,e1);
   printf("后根遍历修改后的树T:\n");
   PostOrderTraverse(T,vi);
   printf("\n%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");
   LevelOrderTraverse(p,vi);
   printf("\n将树p插到树T中,请输入T中p的双亲结点 子树序号: ");
   scanf("%c%d%*c",&e,&i);
   q=Point(T,e);
   InsertChild(&T,q,i,p);
   printf("层序遍历树T:\n");
   LevelOrderTraverse(T,vi);
   printf("\n删除树T中结点e的第i棵子树,请输入e i: ");
   scanf("%c%d",&e,&i);
   q=Point(T,e);
   DeleteChild(&T,q,i);
   printf("层序遍历树T:\n",e,i);
   LevelOrderTraverse(T,vi);
   printf("\n");
   DestroyTree(&T);
 }
Ejemplo n.º 20
0
void KrTile::Draw(	KrPaintInfo* paintInfo, const KrRect& clip )
{
	GLASSERT( IsVisible() );
	if ( bounds.Intersect( clip ) )
	{
		resource->Draw(	paintInfo,
						CompositeXForm(),
						rotation,
						CompositeCForm(),
						clip,

						CompositeQuality(),

						TreeDepth() );
	}
}
Ejemplo n.º 21
0
 static int TreeDepth(CSTree T)
 { // 初始条件: 树T存在。操作结果: 返回T的深度
   CSTree p;
   int depth,max=0;
   if(!T) // 树空
     return 0;
   if(!T->firstchild) // 树无长子
     return 1;
   for(p=T->firstchild;p;p=p->nextsibling)
   {
     depth=TreeDepth(p);
     if(depth>max)
       max=depth;
   }
   return max+1;
 }
Ejemplo n.º 22
0
 int TreeDepth(CSTree T)
 { /* 初始条件: 树T存在。操作结果: 返回T的深度 */
   CSTree p;
   int depth,max=0;
   if(!T) /* 树空 */
     return 0;
   if(!T->firstchild) /* 树无长子 */
     return 1;
   for(p=T->firstchild;p;p=p->nextsibling)
   {
     depth=TreeDepth(p);
     if(depth>max)
       max=depth;
   }
   return max+1;
 }
Ejemplo n.º 23
0
int main(int argc,char *argv[])
{
	int i;
	TElemType e,tempe;
	PTree T,C;

	InitTree(T);
	InitTree(C);

	printf("������:");
	CreateTree(T);
	CreateTree(C);
	printf("\n������:");
	TraverseTree(T,Visit);
	printf("\n");
	TraverseTree(C,Visit);

	printf("\n����:%c",Root(T));
	printf("\n����i:");
	scanf("%d%*c",&i);
	printf("\n��ֵ:%c",(tempe=Value(T,i)));
	printf("\n��ֵ:");
	scanf("%c%*c",&e);
	Assign(T,tempe,e);
	printf("\n���ڵ㡢���ӡ����ֵܣ��������:%c %c %c %d %d",
		
		Value(T,Parent(T,e)),
		Value(T,LeftChild(T,e)),Value(T,RightSibling(T,e)),
		TreeDepth(T),TreeEmpty(T));
	printf("\n��������:");
	InsertChild(T,e,1,C);
	TraverseTree(T,Visit);
	printf("\nɾ�������:");
	DeleteChild(T,e,1);
	TraverseTree(T,Visit);

	DestroyTree(T);
	DestroyTree(C);
	return 0;
}
Ejemplo n.º 24
0
void main()
{
	CBTType *root=NULL;
	char  menusel;
	void (*TreeNodeData1)(CBTType *p);
	TreeNodeData1=TreeNodeData;

	root = InitTree();
	do{
		printf("请选择菜单添加二叉树的节点\n");
		printf("0.退出\t");
		printf("1.添加二叉树的节点\n");
		menusel = getch();
		switch(menusel)
		{
		case '1':
			AddTreeNode(root);
			break;
		case '0':
			break;
		default:
			;
		}
	}while(menusel != '0');

	do{
		printf("请选择菜单遍历二叉树,输入0表示退出:\n");
		printf("1.先序遍历DLR\t");
		printf("2.中序遍历LDR\n");
		printf("3.后序遍历LRD\t");
		printf("4.按层遍历\n");


		menusel = getch();
		switch(menusel)
		{
		case '0':
			break;
		case '1':
			printf("\n 先序遍历DLR的结果:");
			DLRTree(root,TreeNodeData1);
			printf("\n");
			break;
		case '2':
			printf("\n中序遍历LDR的结果:");
			LDRTree(root,TreeNodeData1);
			printf("\n");
			break;
		case '3':
			printf("\n 后序遍历LRD的结果:");
			LRDTree(root,TreeNodeData1);
			printf("\n");
			break;
		case '4':
			printf("\n 按层遍历的结果:");
			LevelTree(root,TreeNodeData1);
			printf("\n");
			break;
		default:
			;
		}
	
	}while(menusel != '0');

	printf("\n 二叉树深度为:%d \n",TreeDepth(root));

	ClearTree(root);
	root = NULL;


}
 int TreeDepth(TreeNode* pRoot)
 {
     if (pRoot == NULL) return 0;
     return 1 + max(TreeDepth(pRoot->left), TreeDepth(pRoot->right));
 }
Ejemplo n.º 26
0
cisstCovTree_Mesh::cisstCovTree_Mesh(cisstMesh &mesh, int countThresh, double diagThresh)
  : MeshP(&mesh)
{
  NData = MeshP->NumTriangles();
  DataIndices = new int[NData];
  for (int i = 0; i < NData; i++)
  {
    DataIndices[i] = i;
  }
  Top = new cisstCovTreeNode(DataIndices, NData, this, NULL);
  NNodes = 0; NNodes++;
  treeDepth = Top->ConstructSubtree(countThresh, diagThresh);

#ifdef DebugCovTree
  fprintf(debugFile, "Mesh Cov Tree built: NNodes=%d  NData=%d  TreeDepth=%d\n", NumNodes(), NumData(), TreeDepth());
#endif
}
Ejemplo n.º 27
0
// Build tree from point cloud input
//  this constructor does not define the noise model for the point cloud;
//  the user must do this manually by calling the noise model methods of this class
PDTree_PointCloud::PDTree_PointCloud(
  cisstPointCloud &pointCloud,
  int nThresh, 
  double diagThresh ) :
pointCloud(pointCloud)
{
  NData = pointCloud.points.size();
  DataIndices = new int[NData];
  for (int i = 0; i < NData; i++)
  {
    DataIndices[i] = i;
  }
  Top = new PDTreeNode(DataIndices, NData, this, NULL);
  NNodes = 0; NNodes++;
  treeDepth = Top->ConstructSubtree(nThresh, diagThresh);

#ifdef DEBUG_PD_TREE
  fprintf(debugFile, "Point Cloud Cov Tree built: NNodes=%d  NData=%d  TreeDepth=%d\n", NumNodes(), NumData(), TreeDepth());
#endif
}