下面代码的调试过程和结果:#include <stdio.h> #include <stdlib.h> // 二叉树结构体定义 struct Node { int data; struct Node* left; struct Node* right; }; // 创建二叉树 struct Node* createBinaryTree() { struct Node* root = NULL; int data; printf("请输入节点的值(输入-1表示该节点为空):"); scanf("%d", &data); if (data == -1) { return NULL; } else { root = (struct Node*)malloc(sizeof(struct Node)); root->data = data; printf("请输入%d的左子节点:\n", data); root->left = createBinaryTree(); printf("请输入%d的右子节点:\n", data); root->right = createBinaryTree(); } return root; } // 先序遍历 void preOrder(struct Node* root) { if (root == NULL) { return; } printf("%d ", root->data); preOrder(root->left); preOrder(root->right); } // 中序遍历 void inOrder(struct Node* root) { if (root == NULL) { return; } inOrder(root->left); printf("%d ", root->data); inOrder(root->right); } // 后序遍历 void postOrder(struct Node* root) { if (root == NULL) { return; } postOrder(root->left); postOrder(root->right); printf("%d ", root->data); } int main() { struct Node* root = NULL; root = createBinaryTree(); printf("先序遍历结果:\n"); preOrder(root); printf("\n中序遍历结果:\n"); inOrder(root); printf("\n后序遍历结果:\n"); postOrder(root); return 0; }
时间: 2024-01-18 20:01:49 浏览: 64
二叉树非递归遍历.zip-/二叉树非递归遍历.zip-二叉树非递归遍历.zip 二叉树非递归遍历.zip
这段代码主要实现了二叉树的创建和遍历。其中,createBinaryTree()函数用于创建二叉树,preOrder()、inOrder()、postOrder()函数分别实现了先序遍历、中序遍历和后序遍历。
在程序运行时,首先调用createBinaryTree()函数创建二叉树,并将根节点保存在root指针变量中。然后依次调用preOrder()、inOrder()、postOrder()函数对二叉树进行先序、中序、后序遍历,并将遍历结果打印出来。
在调试过程中,如果输入的节点值为-1,则表示该节点为空,直接返回NULL。如果输入的节点值不为-1,则动态分配内存,创建一个新的节点,并将输入的值赋给节点的data成员。然后递归调用createBinaryTree()函数,分别创建该节点的左子树和右子树,并将左子树和右子树的根节点分别存储在当前节点的left和right成员中。
如果输入的二叉树是一棵完整的二叉树,那么遍历输出的结果应该是一样的。但如果输入的二叉树不是完整的二叉树,那么每种遍历方式输出的结果都可能不同。因此,可以通过不同的遍历方式来判断输入的二叉树是否正确。
阅读全文