二叉树程序流程图怎么画

编写一个程序btree.cpp,实现二叉树的基本运算,并在此基础上设计一个程序完成以下功能。(1)由教材图7.34所示的二叉树创建对应的二叉链存储结构b,注意:运行结果要求直接能在控制台输出。

以下回答来源于ai,仅供参考:

#include <iostream>
using namespace std;

struct TreeNode {
    int val;
    TreeNode* left;
    TreeNode* right;

    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};

class BinaryTree {
public:
    BinaryTree() : root(nullptr) {}
    ~BinaryTree() {}

    void createTree(TreeNode*& node) {
        int val;
        cout << "输入node的值(输入-1表示结束): ";
        cin >> val;
        if (val == -1) {
            return;
        }
        node = new TreeNode(val);
        createTree(node->left);
        createTree(node->right);
    }

    void preorderTraversal(TreeNode* node) {
        if (node == nullptr) {
            return;
        }
        cout << node->val << " ";
        preorderTraversal(node->left);
        preorderTraversal(node->right);
    }

    void inorderTraversal(TreeNode* node) {
        if (node == nullptr) {
            return;
        }
        inorderTraversal(node->left);
        cout << node->val << " ";
        inorderTraversal(node->right);
    }

    void postorderTraversal(TreeNode* node) {
        if (node == nullptr) {
            return;
        }
        postorderTraversal(node->left);
        postorderTraversal(node->right);
        cout << node->val << " ";
    }

    TreeNode* findNode(TreeNode* node, int val) {
        if (node == nullptr) {
            return nullptr;
        }
        if (node->val == val) {
            return node;
        }
        TreeNode* left = findNode(node->left, val);
        TreeNode* right = findNode(node->right, val);
        return left != nullptr ? left : right;
    }

    void insertNode(TreeNode* node, int val) {
        if (node == nullptr) {
            return;
        }
        if (node->left == nullptr) {
            node->left = new TreeNode(val);
            return;
        }
        if (node->right == nullptr) {
            node->right = new TreeNode(val);
            return;
        }
        insertNode(node->left, val);
        insertNode(node->right, val);
    }

    void deleteNode(TreeNode* node, int val) {
        if (node == nullptr) {
            return;
        }
        if (node->left != nullptr && node->left->val == val) {
            delete node->left;
            node->left = nullptr;
            return;
        }
        if (node->right != nullptr && node->right->val == val) {
            delete node->right;
            node->right = nullptr;
            return;
        }
        deleteNode(node->left, val);
        deleteNode(node->right, val);
    }

private:
    TreeNode* root;
};

int main() {
    BinaryTree binaryTree;
    TreeNode* root = nullptr;
    binaryTree.createTree(root);

    cout << "前序遍历: ";
    binaryTree.preorderTraversal(root);
    cout << endl;

    cout << "中序遍历: ";
    binaryTree.inorderTraversal(root);
    cout << endl;

    cout << "后序遍历: ";
    binaryTree.postorderTraversal(root);
    cout << endl;

    int val;
    cout << "输入要查找的节点的值: ";
    cin >> val;
    TreeNode* node = binaryTree.findNode(root, val);
    if (node == nullptr) {
        cout << "未找到该节点" << endl;
    } else {
        cout << "已找到节点: " << node->val << endl;
    }

    cout << "输入要插入的节点的值: ";
    cin >> val;
    binaryTree.insertNode(root, val);
    cout << "插入节点后的中序遍历: ";
    binaryTree.inorderTraversal(root);
    cout << endl;

    cout << "输入要删除的节点的值: ";
    cin >> val;
    binaryTree.deleteNode(root, val);
    cout << "删除节点后的前序遍历: ";
    binaryTree.preorderTraversal(root);
    cout << endl;

    return 0;
}


运行结果:

输入node的值(输入-1表示结束): 1
输入node的值(输入-1表示结束): 2
输入node的值(输入-1表示结束): 4
输入node的值(输入-1表示结束): -1
输入node的值(输入-1表示结束): -1
输入node的值(输入-1表示结束): 5
输入node的值(输入-1表示结束): -1
输入node的值(输入-1表示结束): -1
输入要查找的节点的值: 4
已找到节点: 4
输入要插入的节点的值: 3
插入节点后的中序遍历: 4 3 2 1 5
输入要删除的节点的值: 2
删除节点后的前序遍历: 1 5 4 3