中国人民大学上机题(二)
每日编程中遇到任何疑问、意见、建议请公众号留言或加入每日编程群聊739635399
从文件1输入一个文本,统计其数字(文本中有其他字符),并输出到文件2。
输入格式:
输入一串字符串
输出格式:
统计字符串中数字的个数并输出到文件2中
输入样例:
as6d65s6a
输出样例:
4
解决方法:
(1)代码实现:
//求二叉树的高和最长的路径
#include
using namespace std;
//定义节点
typedef struct node
{
struct node *lchild;
struct node *rchild;
char data;
} BiTreeNode, *BiTree;
//按照前序顺序建立二叉树
void createBiTree(BiTree &T){
char c;
cin >> c;
if ('#' == c)
//当遇到#时,令树的根节点为NULL,从而结束该分支的递归
T = NULL;
else
{
T = new BiTreeNode;
T->data = c;
createBiTree(T->lchild);
createBiTree(T->rchild);
}
}
/**Find Height
*只要是比较根节点的左子树高度和右子树高度,若左子树高度>右子树高度,那么树的高度为左子树高度+1(其中
*1是要加上根节点的高度);若左子树高度*/
int findHeigth(BiTree root){
int lHeigt, rHeight;
if (root == NULL)
return 0;
else
{
lHeigt = findHeigth(root->lchild);
rHeight = findHeigth(root->rchild);
if (lHeigt > rHeight)
return lHeigt + 1;
else
return rHeight + 1;
}
}
/**Find Longest Path
*算法思想:采用中序遍历非递归的方式,借助一个工作栈,一个辅助栈,工作栈里面存储的元素是中序遍历的
*序列,辅助栈里面则是存储的最长的路径序列
*/
void longest(BiTree T){
if (T != NULL) //在T不为空的情况下
{
cout <data; //访问节点
if (findHeigth(T->lchild) > findHeigth(T->rchild)) //判断往左走还是往右走
longest(T->lchild);
else
longest(T->rchild);
}
}
int main(){
BiTree T; //声明一个指向二叉树根节点的指针
createBiTree(T);
cout <"二叉树创建完成!" <endl;
cout <"前序遍历二叉树:" <endl;
cout <endl;
int heigth = findHeigth(T);
cout <"height=" <endl;
longest(T);
system("pause");
return 0;
}
明日预告:西安电子科技大学上机题(二)
编写一个程序,从键盘输入n个非零常数(0
输入格式:
输入的整数之间以空格分割,输入为0时结束
输出格式:
在一行上从小到大输出计算结果,整数之间用一个空格分割,最后换行
输入样例:
56 12 789 521 0
输出样例:
3 8 11 24