C++二叉树从创建到遍历非核心代码模式leetcode94

#include <iostream>
using namespace std;

class Node {//二叉树结点
public:    
    int m_value;//结点值
    Node* m_left;//左子树
    Node* m_right;//右子树
    Node():m_left(nullptr),m_right(nullptr) {}
    Node(int val):m_value(val),m_left(nullptr),m_right(nullptr) {}
    ~Node() {}
};

class Tree {//创建二叉树
public:
    Node* m_root;//根节点
    Tree():m_root(nullptr) {}
    Tree(Node* t):m_root(t) {}
    ~Tree() {}
    Node* Create(const int v[]);
};

Node* Tree::Create(const int v[])//创建二叉树然后把树的根结点返回
{
    if (*v == 0)//没有树
    {
        return nullptr;
    }
    else
    {
        Node* root = new Node(*v);//新创建根结点
        root->m_left = Create(++v);//创建左孩子
        root->m_right = Create(++v);//创建右孩子
        return root;
    }
}

//
//递归--直接输出
void PreOderTree(Node* t)//前序遍历
{
    if (t == nullptr) return;
    else {
        cout << t->m_value << " ";
        PreOderTree(t->m_left);
        PreOderTree(t->m_right);
    }
}

void InOderTree(Node* t)//中序遍历
{
    if (t == nullptr) return;
    else {
        InOderTree(t->m_left);//如果根不空了先遍历他的左子树
        cout << t->m_value << " ";//左子树完了之后,把根的值输出一下
        InOderTree(t->m_right);//完了再遍历他的右子树
    }
}

void PreOderTree(Node* t)//后序遍历
{
    if (t == nullptr) return;
    else {
        PreOderTree(t->m_left);
        PreOderTree(t->m_right);
        cout << t->m_value << " ";
    }
}

int main() 
{
    Tree tree;
    int v[] = {1,0,2,3};
    Node* root = tree.Create(v);
    InOderTree(root);
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值