标签:流程图 a* 返回 count 思维 字符转换 oid 分享 二叉树
建树的函数一直写不出来,上机考试的时候都是编程题,都需要建树
void InitExpTree(BTree &T,string str) ; //建表达式的二叉树
定义树栈 s1 存储数字,字符型栈 s2 存储运算符
‘#’入栈s2;
while( 字符串不空)
if (str[i] 为数字)
创建树节点,赋予str[i]的值,并置其左右孩子为空后再次入栈s1;
else
调用Precede函数
case ‘<‘ 运算符入栈s2;
case ‘=‘ s2栈顶元素出栈
case ‘>‘ 创建新的树节点并赋予s2栈顶元素值,右左孩子分别取s1栈顶元素后再次入s1栈;
while (栈s2中仍有运算符)
创建新的树节点并赋予s2栈顶元素值,右左孩子分别取s1栈顶元素后再次入s1栈;
double EvaluateExTree(BTree T);//计算表达式树
定义浮点型数 a b ;递归把字符转换成数字;a,b分别存储树节点的左右子树;
while (树节点存在)
case ‘+‘ 返回 a+b;
case ‘-‘ 返回 a-b;
case ‘*‘ 返回a*b;
case ‘/‘
if(b不为0) 返回a/b;
void createtree(string str,int i,btree &bt);//创建树
定义链表 str 存储输入的字符,树形指针 *bt
getchar()输入第一个字符,其余字符存储到 str 中;
while (str[i++] 不为‘#‘)
建立新节点bt;
将str[i]的值赋予bt;
递归遍历bt的左子树和右子树;
void count(btree bt,int n);//求叶子节点带权路径长度和
定义整型字符 h 存储叶子节点所在的高度,整型字符 s 存储运算结果
if (bt的左右孩子节点都为空)
bt节点字符数转换为数字a;
s=s+a*高度;
if (bt的左孩子节点不为空或bt的右孩子节点不为空)
递归遍历查找叶子节点;
void PreorderPrintLeaves( BinTree BT );//先序输出叶结点
先序序列根,左,右
如果传下来根节点就是空,直接返回;如果存在子节点,一直访问
if(根存在)访问左子树,若存在继续递归访问左子树
访问右子树 ,若存在继续递归访问右子树
if(左右子树都不存在即为叶节点)输出叶节点
```
标签:流程图 a* 返回 count 思维 字符转换 oid 分享 二叉树
原文地址:https://www.cnblogs.com/lbhd/p/8995711.html