Example #1
0
void InorderTraverse(BTreeNode* bt, VisitFuncPtr action) {
	if(bt != NULL) {
		InorderTraverse(bt->left, action);
		action(bt->data);
		InorderTraverse(bt->right, action);
	}
}
void InorderTraverse(TreeNode* root, std::vector<int>& result)
{
	if (root == NULL)
		return;

	InorderTraverse(root->left, result);
	result.push_back(root->val);
	InorderTraverse(root->right, result);
}
Example #3
0
void PostorderTraverse(BTreeNode* bt, VisitFuncPtr action)
{
	if(bt == NULL)
		return;

	InorderTraverse(bt->left, action);
	InorderTraverse(bt->right, action);
	action(bt->data);
}
void BinarySearchTree<T>::InorderTraverse(BSTNode<T>* pNode)
{
	if(pNode != NULL)
	{
		InorderTraverse(pNode->pLeft);
		cout<<pNode->nData<<"  ";
		InorderTraverse(pNode->pRight);
	}
}
Example #5
0
int InorderTraverse(BiTree T)
{
	if(T!=NULL)
	{
		InorderTraverse(T->lchild);
		printf("%d ",T->data);
		InorderTraverse(T->rchild);
	}
	return OK;
}
void InorderTraverse(BtNode root)  //LDR
{
	if(root == NULL)
	{
		return;
	}
	InorderTraverse(root->left);
	printf("%d\n", root->data);
	InorderTraverse(root->right);

	return;
}
std::vector<int> ConvertTreeNodeToVector(TreeNode* root)
{
	std::vector<int> result;

	InorderTraverse(root, result);
	return result;
}
int main()
{
	BTreeNode * bt1 = MakeBTreeNode();
	BTreeNode * bt2 = MakeBTreeNode();
	BTreeNode * bt3 = MakeBTreeNode();
	BTreeNode * bt4 = MakeBTreeNode();
	BTreeNode * bt5 = MakeBTreeNode();
	BTreeNode * bt6 = MakeBTreeNode();

	SetData(bt1, 1);
	SetData(bt2, 2);
	SetData(bt3, 3);
	SetData(bt4, 4);
	SetData(bt5, 5);
	SetData(bt6, 6);

	MakeLeftSubTree(bt1, bt2);
	MakeRightSubTree(bt1, bt3);
	MakeLeftSubTree(bt2, bt4);
	MakeRightSubTree(bt2, bt5);
	MakeRightSubTree(bt3, bt6);

	PreorderTraverse(bt1, ShowInData);
	printf("\n");
	InorderTraverse(bt1, ShowInData);
	printf("\n");
	PostorderTraverse(bt1, ShowInData);
	printf("\n");

	return 0;
}
void BinarySearchTree<T>::Test()
{
	DataIO<T> dataIO;
	cout<<endl<<TEST_BEGIN_STRING<<endl;
	cout<<"Let's See The Test of Binary Search Tree"<<endl;
	T* pData = dataIO.GetDataFromStdIO(1);
	if(pData != NULL)
	{
		unsigned int nDataByte = dataIO.GetDataByte();					//Add data into tree
		for(unsigned int i=0;i<nDataByte;i++)
		{
			cout<<"Insert Data:"<<pData[i]<<endl;
			Insert(pData[i]);
		}
		cout<<"PreorderTraverse the Binary Search Tree"<<endl;
		PreorderTraverse();												//Traverse the node of the tree
		cout<<endl<<"InorderTraverse the Binary Search Tree"<<endl;
		InorderTraverse();
		cout<<endl<<"PostorderTraverse the Binary Search Tree"<<endl;
		PostorderTraverse();
		cout<<endl;
		for(unsigned int i=0;i<nDataByte;i++)
		{
			Delete(pData[i]);											//Delete data from the tree
			cout<<"Delete Data:"<<pData[i]<<endl;
			cout<<"PreorderTraverse the Binary Search Tree"<<endl;
			PreorderTraverse();
			cout<<endl;
		}
		cout<<TEST_END_STRING<<endl<<endl;
	}
}
Example #10
0
void TEST()
{
	vector<int> v{ 1,2,3,4,5 };
	TreeNode* root = CreateTree(v);
	FirstOrderTraverse(root);
	cout << endl;
	cout << "-----------------------" << endl;
	FirstOrderTraverseIter(root);
	cout << "-----------------------" << endl;
	InorderTraverse(root);
	cout << endl;
	cout << "-----------------------" << endl;
	InorderTraverseIter(root);
	cout << "-----------------------" << endl;
	PostorderTraverse(root);
	cout << endl;
	cout << "-----------------------" << endl;
	PostorderTraverseIter(root);
	cout << endl;
	cout << endl;
	MakeEmpty(root);
	printf("Make empty OK!\n");
}
void BSTShowAll(BTreeNode *bst){
	InorderTraverse(bst,ShowIntData);
}
Example #12
0
void main()
{
	BiTree T;         //定义一个指向BiTNode结点的指针
	int choice;
	do{
	printf("\n");
	printf("请选择操作:\n");
	printf("1.按照先序的次序生成一颗二叉树\n");
	printf("2.递归算法实现二叉树的先序遍历,输出各结点值\n");
    printf("3.用非递归算法实现二叉树的遍历,输出各结点值\n");
	printf("4.求度分别为0、1、2的结点的数目(递归算法实现)\n");
	printf("5.求度分别为0、1、2的结点的数目(非递归算法实现)\n");
	printf("6.按层次遍历二叉树\n");
	printf("7.求二叉树的高度(深度)\n");
	printf("8.判断是否为完全二叉树,输出\"Yes!\"或\"No!\"\n");
	printf("9.交换每个结点的左右子树,并用先序遍历的方式输出\n");
	printf("10.对交换左右子树后的二叉树作中序遍历\n");
    printf("11.保存到文件\n");
	printf("12.从文件中读取并输出\n");
	printf("13.退出\n");
	scanf("%d",&choice);
	switch(choice){
	case 1:
		CreateBiTree(&T);   //创建二叉树
		break;
    case 2:
		PreOrderTraverse(T); //利用递归算法的先序遍历,输出结点值
		break;
	case 3:
		PreOrderTraverse2(T);//利用非递归算法的先序遍历,输出结点值
		break;
	case 4:
		get_node(T); //利用递归算法得到的各个结点的个数
		break;
	case 5:
		get_node_1(T);  //利用非递归算法得到的各个结点的个数
		break;
	case 6:
		LevelOrder(T);
		break;
	case 7:
		printf("二叉树的高度为%d\n",height(T));
		break;
	case 8:
		if(judge(T)==0)
			printf("No!\n");
		else
			printf("Yes!\n");
		break;
    case 9:
         exchange(T);
		 PreOrderTraverse(T);
		 break;
	case 10:
         InorderTraverse(T);
		 break;
	case 11:
		copy_TERM("d:\\aaa.dat",T);
		break;
	case 12:
		type("d:\\aaa.dat",T);
		break;
	}	
	}while(choice!=13);	
}
void BinarySearchTree<T>::InorderTraverse()
{
	InorderTraverse(m_pRoot);
}