以二叉链表表示二叉树,建立一棵二叉树; 输出二叉树的中序遍历结果,非递归要求实现;c语言解决
时间: 2024-05-10 16:12:04 浏览: 142
以二叉链表表示二叉树可以通过定义一个结构体来实现,每个节点有一个数据域和两个指针域,分别指向该节点的左右子树。下面是一个二叉链表的定义示例:
```
typedef struct TreeNode{
int data;
struct TreeNode* left;
struct TreeNode* right;
}TreeNode, *BinaryTree;
```
建立一棵二叉树可以通过递归的方式,对于每个节点,先输入节点的值,再递归建立左子树和右子树。下面是一个建立二叉树的示例代码:
```
BinaryTree CreateBinaryTree(){
int data;
scanf("%d", &data);
if(data == -1){
return NULL;
}
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->data = data;
node->left = CreateBinaryTree();
node->right = CreateBinaryTree();
return node;
}
```
对于输出二叉树的中序遍历结果,我们可以用非递归的方式来实现。具体方法是使用一个栈来模拟递归过程,对于每个节点,先将其入栈,再将其指向左子树的指针赋值给当前节点,直到当前节点为NULL,此时弹出栈顶元素并输出它的值,然后将当前节点指向右子树。下面是一个输出中序遍历结果的示例代码:
```
void InorderTraversal(BinaryTree root){
if(root == NULL){
return;
}
stack<TreeNode*> s;
TreeNode* p = root;
while(!s.empty() || p != NULL){
if(p != NULL){
s.push(p);
p = p->left;
}
else{
p = s.top();
s.pop();
printf("%d ", p->data);
p = p->right;
}
}
}
```
阅读全文