树
2016-05-26 13:40
169 查看
二叉树
(1) 非空二叉树上叶子结点数等于双分支结点数加1;n0=n2+1;
(2) 在一棵二叉树中,所有结点的分支数等于单分支结点数加双分支结点数的2倍;
总分支数=n1+2*n2;
总结点数 = 总分支数+1;
(3) 二叉树的第i层上最多有2的i-1次幂个结点;
(4) 高度为k的二叉树最多有2的k次幂-1个结点;
(5) 具有n个结点的完全二叉树的深度为floor(log2n) + 1 。
(6) 如果对一棵有n个结点的完全二叉树(其深度为floor(log2n) + 1 )的结点按层序编号,则对任一结点i(1≤i≤n)有:
如果i = 1,则结点i是二叉树的根,无双亲;如果i > 1,则其双亲PARENT(i)是结点 floor((i)/2)。
如果2i > n,则结点i无左孩子;否则其左孩子LCHILD(i)是结点2i。
如果2i + 1 > n,则结点i无右孩子;否则其右孩子RCHILD(i)是结点2i + 1
二叉树的存储
(1) 顺序存储:适合完全二叉树;
(2)链式存储:
遍历
(1) 先序遍历:
(2) 中序遍历:
(3) 后序遍历:
(1) 非空二叉树上叶子结点数等于双分支结点数加1;n0=n2+1;
(2) 在一棵二叉树中,所有结点的分支数等于单分支结点数加双分支结点数的2倍;
总分支数=n1+2*n2;
总结点数 = 总分支数+1;
(3) 二叉树的第i层上最多有2的i-1次幂个结点;
(4) 高度为k的二叉树最多有2的k次幂-1个结点;
(5) 具有n个结点的完全二叉树的深度为floor(log2n) + 1 。
(6) 如果对一棵有n个结点的完全二叉树(其深度为floor(log2n) + 1 )的结点按层序编号,则对任一结点i(1≤i≤n)有:
如果i = 1,则结点i是二叉树的根,无双亲;如果i > 1,则其双亲PARENT(i)是结点 floor((i)/2)。
如果2i > n,则结点i无左孩子;否则其左孩子LCHILD(i)是结点2i。
如果2i + 1 > n,则结点i无右孩子;否则其右孩子RCHILD(i)是结点2i + 1
二叉树的存储
(1) 顺序存储:适合完全二叉树;
(2)链式存储:
typedef struct BiTNode { TElemType data; struct BiTNode *lchild, *rchild; // 左右孩子指针 }BiTNode, *BiTree;
遍历
(1) 先序遍历:
void preorder(BTNode *p) { if (p!=NULL) { visit(p); preorder(p->lchild); preorder(p->rchild); } }
(2) 中序遍历:
void preorder(BTNode *p) { if (p!=NULL) { preorder(p->lchild); visit(p); preorder(p->rchild); } }
(3) 后序遍历:
void preorder(BTNode *p) { if (p!=NULL) { preorder(p->lchild); preorder(p->rchild); visit(p); } }
相关文章推荐
- AVL树-自平衡二叉查找树(Java实现)
- C语言二叉树的非递归遍历实例分析
- 使用C语言构建基本的二叉树数据结构
- 一波二叉树遍历问题的C++解答实例分享
- 举例讲解C语言程序中对二叉树数据结构的各种遍历方式
- C++非递归队列实现二叉树的广度优先遍历
- PHP实现的线索二叉树及二叉树遍历方法详解
- C#使用前序遍历、中序遍历和后序遍历打印二叉树的方法
- C#非递归先序遍历二叉树实例
- C++将二叉树转为双向链表及判断两个链表是否相交
- C++非递归建立二叉树实例
- C语言实现找出二叉树中某个值的所有路径的方法
- C++实现二叉树遍历序列的求解方法
- C语言实现二叉树遍历的迭代算法
- C++实现查找二叉树中和为某一值的所有路径的示例
- 用C语言判断一个二叉树是否为另一个的子结构
- C++实现二叉树非递归遍历方法实例总结
- C++二叉树结构的建立与基本操作
- 深入遍历二叉树的各种操作详解(非递归遍历)
- Python实现二叉树结构与进行二叉树遍历的方法详解