二叉树——树的学习(2)

二叉树的介绍

  • 二叉树是一棵树,其中每个节点的儿子数至多为两个(儿子数的范围是[0,2] )
  • 二叉树的一个性质是平均二叉树的深度要比N小得多,平均深度为O(
    根号N),但是在最坏得情况下深度可以达到N-1

二叉树的实现

二叉树节点的声明为:

typedef struct TreeNode *Tree;
struct TreeNode{
	ElementType Element;
	Tree Left;
	Tree Right;
}

二叉树的一些应用

构建表达树:一棵表达树是这样的:叶节点都是操作数,其他树节点是操作符。我们把后缀表达式构建成一棵表达树是这样子的:我们一次一个符号的读入表达式,如果符号是操作数,那么我们就建立一个单节点树并将指向它的一个指针压入栈中,如果符号是操作符,那么我们就从栈中弹出指向两颗树的指针并形成一棵新的树,然后再将指向该树的指针压入到栈中

typedef struct TreeNode *Tree;
struct TreeNode {
	char element;
	Tree Left;
	Tree Right;
};
//栈的声明
struct Stack {
	Tree* val;
	int top;
};
//构建表达树(后缀表达式)
	Tree CreateTree(string s) {
		int i = 0;
		Stack* ens=CreateStack(s.length());
		while (s[i] != '\0') {
			if (s[i] == '+' || s[i] == '*' || s[i] == '-' || s[i] == '/') {
				Tree ch1 = new TreeNode;
				ch1->element = s[i];
				//因为操作符都是二元操作符,故在栈中必存在至少两个元素
				ch1->Left = ens->val[ens->top--];//弹出栈顶元素,作为表达树的左子树
				ch1->Right = ens->val[ens->top];  //弹出栈顶元素,作为表达树的右子树
				ens->val[ens->top] = ch1;  //将表达树压回栈中
			}
			else {
				Tree ch2 = new TreeNode;
				ch2->element = s[i];
				ch2->Left = NULL;
				ch2->Right = NULL;
				ens->val[++ens->top] = ch2;
			}
			i++;
		}
		return ens->val[ens->top];
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值