原创、转载请注明出处
二叉树特点
对于完全二叉树,第n层结点的结点个数是2的n次方个,对于第k个结点,它的左子节点是2k,右子节点是2k+1。
前序遍历
中序遍历:
后序遍历:
一、结构
二叉树有2类表示方法:链式和数组模拟。
其中数组模拟有2种:1.一个数组,数组下标代表完全二叉树的编号,对于普通二叉树,没有结点的为空,有节点的地方数组值为二叉树权值。
2.2个数组l[id]、r[id],二叉树结点的权值是编号,数组下标是编号,r[i]的数组值是结点i的右结点编号。(权值各不相同且都为正整数才能用这种方式表示)
二、构造二叉树
1.最基础的输入方式(数组的只写了一种):
<1>根据层次遍历构造二叉树,例如:
●链表结构代码:
#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; }