树
基本概念
- 分类:
1)空树. n=0时称为空树
2)非空树.
特点:
(1)有且只有一个特定的称为根的结点.
(2)其余结点分为m个互不相交的有限集,并且称为根的子树.- 树的深度:树中结点的最大层次称为树的深度或高度.
- 结点的度:结点拥有的子树数称为结点的度.
- 二叉树:由一个根结点和两个互不相交的子树组成.
- 结点的数=总分支数+1
特点:
(1)每个结点最多有两颗子树
(2)左子树和右子树是有顺序的,次序不能任意颠倒
(3)即使树中某结点只有一颗子树,也要区分是左子树还是右子树.
树结构和线性结构的区别:
线性结构 | 树结构 |
---|---|
第一个元素无:无前驱 | 根节点:无双亲,唯一 |
最后一个元素:无后继 | 叶节点:无孩子,可以多个 |
中间元素:一个前驱一个后继 | 中间节点:一个双亲多个孩子 |
用C++代码实现树的基本操作:
主要包括一些,建树,前中后序非递归和递归的遍历,以及层次遍历,打印路径等操作。
#include<iostream>
#include<cstdio>
#include<stack>
#include<queue>
using namespace std;
typedef struct BiTode
{
char data;
struct BiTode* left;
struct BiTode* right;
}BiTode,*BiTree;
void CreateTree(BiTree* Tree)
{
char ch;
ch = getchar();
if (ch == '.') *Tree = NULL;
else
{
*Tree = (BiTree)malloc(sizeof(BiTode));
(*Tree)->data = ch;
CreateTree(&(*Tree)->left);
CreateTree(&(*Tree)->right);
}
}
void preorder(BiTree Tree)
{
if (Tree == NULL)
return;
cout << Tree->data << " ";
preorder(Tree->left);
preorder(Tree->right);
}
//中序非递归遍历
void Inorder(BiTree Troot)
{
if (Troot == NULL)
return;
stack<BiTree> s;
BiTree p = Troot;
while (p != NULL ||