构造和先序访问二叉树 c++
时间: 2024-03-10 15:33:00 浏览: 58
c++二叉树的建立及先序后序中序遍历
5星 · 资源好评率100%
您好,很高兴为您解答问题。关于构造和先序访问二叉树,可以在算法中使用递归的方式实现。
首先,我们需要定义二叉树的结构体。一个二叉树节点包含三个属性:节点值val、左子节点left、右子节点right。
typedef struct TreeNode {
int val;
struct TreeNode* left;
struct TreeNode* right;
} TreeNode;
对于构造二叉树,在输入数据和递归结束的时候,需要建立多级节点的结构体,初始化子节点指针赋空值,具体可以参考以下代码:
TreeNode* buildTree(int* preorder, int preorderSize, int* inorder, int inorderSize) {
if (preorderSize == 0) return NULL;
// 定义根节点,先序遍历的第一个节点为根节点
TreeNode* root = (TreeNode*)malloc(sizeof(TreeNode));
root->val = preorder[0];
root->left = NULL;
root->right = NULL;
// 根节点在中序遍历中的位置
int rootIndex;
for (rootIndex = 0; rootIndex < inorderSize; rootIndex++) {
if (inorder[rootIndex] == root->val) {
break;
}
}
// 构建左右子树
int leftSize = rootIndex;
root->left = buildTree(preorder + 1, leftSize, inorder, leftSize);
root->right = buildTree(preorder + leftSize + 1, preorderSize - leftSize - 1, inorder + rootIndex + 1, inorderSize - rootIndex - 1);
return root;
}
对于先序遍历二叉树,可以使用递归的方式实现。先输出根节点的值,然后依次递归输出左子树和右子树的值。具体可以参考以下代码:
void preorderTraversal(TreeNode* root) {
if (root == NULL) return;
printf("%d ", root->val);
preorderTraversal(root->left);
preorderTraversal(root->right);
}
希望能够解答您的问题。如果还有其他问题,可以随时向我提问。
阅读全文