二叉树的表示方式及遍历

//二叉链表表示法
struct TreeNode {
	char data;
	TreeNode* lchild;
	TreeNode* rchild;
};
//三叉链表表示法
struct TreeTNode {
	int data;
	TreeTNode* lchild;
	TreeTNode* rchild;
	TreeTNode* parent;
};
//双亲表示法
struct DPTNode {
	char data;
	int ParentIndex;
	char LRFlag;
};
struct DPTree {
	DPTNode node[100];
	int CntNode;
	int Root;//位置信息

};
/*遍历方式:
	DLR(先序遍历):先根再左再右
	LDR(中序遍历):先左再根再右
	LRD(后序遍历):先左再右再根

						A
				B              F
					C				G
				D		E		H
	先序遍历:ABCDEFGH
	中序遍历:BDCEAFHG
	后序遍历:DECBHGFA
*/
void preMethood(TreeNode* root) {
	if (root == NULL) {
		return;
	}
	cout << " " << root->data << " ";
	preMethood(root->lchild);
	preMethood(root->rchild);
}
void medMethod(TreeNode* root){
	if (root == NULL) {
		return;
	}
	medMethod(root->lchild);
	cout << " " << root->data << " ";
	medMethod(root->rchild);
}
void lastMethod(TreeNode* root) {
	if (root == NULL) {
		return;
	}
	lastMethod(root->lchild);
	lastMethod(root->rchild);
	cout << " " << root->data << " ";
}
int main() {
	//二叉链表表示法
	TreeNode t1, t2, t3, t4, t5,t6,t7,t8;
	memset(&t1, 0, sizeof(t1));
	memset(&t2, 0, sizeof(t2));
	memset(&t3, 0, sizeof(t3));
	memset(&t4, 0, sizeof(t4));
	memset(&t5, 0, sizeof(t5));
	memset(&t6, 0, sizeof(t6));
	memset(&t7, 0, sizeof(t7));
	memset(&t8, 0, sizeof(t8));
	t1.data = 'A';
	t2.data = 'B';
	t3.data = 'C';
	t4.data = 'D';
	t5.data = 'E';
	t6.data = 'F';
	t7.data = 'G';
	t8.data = 'H';
	t1.lchild = &t2;
	t1.rchild = &t6;
	t2.rchild = &t3;
	t3.lchild = &t4;
	t3.rchild = &t5;
	t6.rchild = &t7;
	t7.lchild = &t8;
	cout << "先序遍历:";
	preMethood(&t1);
	cout << endl;
	cout << "中序遍历:";
	medMethod(&t1);
	cout << endl;
	cout << "后序遍历:";
	lastMethod(&t1);
	cout << endl;
	//双亲表示法
	//DPTree tree;
	A
	//tree.node[0].ParentIndex = -1;
	B
	//tree.node[1].ParentIndex = 0;
	//tree.node[1].data = 'B';
	//tree.node[1].LRFlag = 'L';
	C
	//tree.node[2].ParentIndex = 0;
	//tree.node[2].data = 'C';
	//tree.node[2].LRFlag = 'R';
	D
	//tree.node[3].ParentIndex = 1;
	//tree.node[3].data = 'D';
	//tree.node[3].LRFlag = 'L';
	E
	//tree.node[4].ParentIndex = 2;
	//tree.node[4].data = 'E';
	//tree.node[4].LRFlag = 'R';
	system("pause");
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值