可以使用递归的方式来实现先序遍历二叉树。先序遍历的顺序是:根节点 - 左子树 - 右子树。

具体步骤如下:

  1. 找到后序遍历中的最后一个节点,即为根节点。
  2. 在中序遍历中找到根节点的位置,根节点左边的节点为左子树的中序遍历,根节点右边的节点为右子树的中序遍历。
  3. 根据中序遍历中左子树的长度,可以在后序遍历中确定左子树的后序遍历,根据左子树的长度和根节点的位置,可以在后序遍历中确定右子树的后序遍历。
  4. 递归地对左子树和右子树进行先序遍历,直到叶子节点。

下面是具体的代码实现:

#include <stdio.h>

void preorder(char *inorder, char *postorder, int inStart, int inEnd, int postStart, int postEnd) {
    if (inStart > inEnd || postStart > postEnd) {
        return;
    }
    
    // 根节点为后序遍历的最后一个节点
    char root = postorder[postEnd];
    printf("%c ", root);
    
    // 在中序遍历中找到根节点的位置
    int rootIndex;
    for (int i = inStart; i <= inEnd; i++) {
        if (inorder[i] == root) {
            rootIndex = i;
            break;
        }
    }
    
    // 左子树的长度
    int leftLength = rootIndex - inStart;
    
    // 递归遍历左子树
    preorder(inorder, postorder, inStart, rootIndex - 1, postStart, postStart + leftLength - 1);
    
    // 递归遍历右子树
    preorder(inorder, postorder, rootIndex + 1, inEnd, postStart + leftLength, postEnd - 1);
}

int main() {
    char inorder[] = "DBFEA";
    char postorder[] = "DFEB";
    int length = sizeof(inorder) / sizeof(inorder[0]);
    
    printf("先序遍历结果:");
    preorder(inorder, postorder, 0, length - 1, 0, length - 1);
    
    return 0;
}

输出结果为:D B A F

给出一棵二叉树的中序与后序排列。求出它的先序排列。约定树结点用不同的大写字母表示长度≤8c语言

原文地址: https://www.cveoy.top/t/topic/hPYw 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录