原创、转载请注明出处

二叉树特点

对于完全二叉树,第n层结点的结点个数是2的n次方个,对于第k个结点,它的左子节点是2k,右子节点是2k+1。

前序遍历

中序遍历:

后序遍历:

 

一、结构

二叉树有2类表示方法:链式和数组模拟。

 

其中数组模拟有2种:1.一个数组,数组下标代表完全二叉树的编号,对于普通二叉树,没有结点的为空,有节点的地方数组值为二叉树权值。

                                2.2个数组l[id]、r[id],二叉树结点的权值是编号,数组下标是编号,r[i]的数组值是结点i的右结点编号。(权值各不相同且都为正整数才能用这种方式表示)

 

二、构造二叉树

1.最基础的输入方式(数组的只写了一种):

<1>根据层次遍历构造二叉树,例如:

二叉树c++

●链表结构代码:

二叉树c++
#include "stdafx.h"
#include <iostream>
#include<sstream>
using namespace std;

struct BinaryTree
{
    char data;
    BinaryTree *lch;
    BinaryTree *rch;
};

char a[1000];

void createTree(BinaryTree* &p, int pos)
{
    if (a[pos] == '#')
    {
        p = nullptr;
        return;
    }
    p = new BinaryTree;
    p->data = a[pos];
    createTree(p->lch, pos * 2);
    createTree(p->rch, pos * 2 + 1);
}

void preOrder(BinaryTree* p)
{
    if (p == nullptr)
    {
        return;
    }
    //cout << p->data;
    preOrder(p->lch);
    cout << p->data;
    preOrder(p->rch);
    //cout << p->data;
}

int main()
{
    string str;
    getline(cin, str);
    stringstream s(str);
    int i = 1;
    while (s >> a[i])
    {
        i++;
    }

    BinaryTree* root = new BinaryTree;

    createTree(root, 1);

    preOrder(root);
    cout << endl;
}
View Code

相关文章:

  • 2022-12-23
  • 2021-07-27
  • 2021-07-14
  • 2021-12-19
  • 2022-12-23
  • 2021-12-02
  • 2021-07-12
  • 2021-07-11
猜你喜欢
  • 2021-05-18
  • 2021-08-12
  • 2021-07-08
  • 2021-06-23
  • 2022-12-23
  • 2021-07-07
  • 2021-06-03
相关资源
相似解决方案