程序设计非递归创建二叉树
时间: 2023-12-13 17:51:14 浏览: 31
非递归创建二叉树可以使用栈来实现。具体步骤如下:
1. 创建一个栈,并将根节点入栈。
2. 循环执行以下步骤,直到栈为空:
- 弹出栈顶元素,作为当前节点。
- 接收用户输入,判断用户输入是否为左子树节点的值,如果是则创建左子节点,并将左子节点入栈。
- 如果用户输入不是左子树节点的值,那么就弹出当前节点,再接收用户输入,判断用户输入是否为右子树节点的值,如果是则创建右子节点,并将右子节点入栈。
3. 完成二叉树的创建。
下面是示例代码实现:
```
#include <iostream>
#include <stack>
using namespace std;
// 二叉树节点结构体
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
TreeNode* createBinaryTree() {
int val;
cout << "请输入根节点的值:";
cin >> val;
TreeNode* root = new TreeNode(val);
stack<TreeNode*> nodeStack;
nodeStack.push(root);
while (!nodeStack.empty()) {
TreeNode* cur = nodeStack.top();
nodeStack.pop();
int leftVal, rightVal;
cout << "请输入节点 " << cur->val << " 的左子节点的值(-1表示无左子节点):";
cin >> leftVal;
if (leftVal != -1) {
TreeNode* leftNode = new TreeNode(leftVal);
cur->left = leftNode;
nodeStack.push(leftNode);
}
cout << "请输入节点 " << cur->val << " 的右子节点的值(-1表示无右子节点):";
cin >> rightVal;
if (rightVal != -1) {
TreeNode* rightNode = new TreeNode(rightVal);
cur->right = rightNode;
nodeStack.push(rightNode);
}
}
return root;
}
int main() {
TreeNode* root = createBinaryTree();
return 0;
}
```