1、输入字符序列,建立二叉链表。2、利用栈,编写非递归算法,编程实现二叉树的中序遍历。3、求二叉树的叶子结点个数。4、在主函数中设计一个简单的菜单,分别调试上述算法。
时间: 2024-02-16 08:03:19 浏览: 97
二叉树的几种操作,包括递归先序建立二叉树、先序遍历、中序遍历、后序遍历、非递归的各种遍历
5星 · 资源好评率100%
好的,让我来回答你的问题。
1、输入字符序列,建立二叉链表:可以通过读取输入的字符序列,逐个创建二叉树的节点,再通过指针连接这些节点,最终形成一棵二叉树。
2、利用栈,编写非递归算法,编程实现二叉树的中序遍历:可以通过模拟递归的过程,利用栈来存储需要遍历的节点,实现中序遍历。具体实现方式可以参考下面的伪代码:
```
stack<TreeNode*> s;
TreeNode* p = root;
while (p || !s.empty()) {
if (p) {
s.push(p);
p = p->left;
} else {
p = s.top();
s.pop();
// 对p节点进行操作
cout << p->val << " ";
p = p->right;
}
}
```
3、求二叉树的叶子结点个数:可以通过递归方式遍历二叉树的每个节点,统计叶子节点的个数。具体实现方式可以参考下面的伪代码:
```
int countLeaf(TreeNode* root) {
if (!root) {
return 0;
} else if (!root->left && !root->right) {
return 1;
} else {
return countLeaf(root->left) + countLeaf(root->right);
}
}
```
4、在主函数中设计一个简单的菜单,分别调试上述算法:可以通过命令行交互的方式,让用户输入数字选择要进行的操作,再根据用户的选择调用相应的函数进行处理。具体实现方式可以参考下面的伪代码:
```
int main() {
TreeNode* root = buildTree(); // 输入字符序列,建立二叉链表
while (true) {
cout << "请选择操作:" << endl;
cout << "1. 中序遍历" << endl;
cout << "2. 统计叶子结点个数" << endl;
cout << "3. 退出" << endl;
int choice;
cin >> choice;
switch (choice) {
case 1:
inorderTraversal(root); // 利用栈,编写非递归算法,编程实现二叉树的中序遍历
break;
case 2:
int cnt = countLeaf(root); // 求二叉树的叶子结点个数
cout << "叶子结点个数:" << cnt << endl;
break;
case 3:
return 0;
default:
cout << "输入有误,请重新选择" << endl;
break;
}
}
return 0;
}
```
希望我的回答对你有所帮助!
阅读全文