赞
踩
目录
本篇主要理解树和二叉树相关概念,二叉树遍历及基本操作。
树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:
树与非树的区分点:
树型结构里,有非常多的概念,多用用就记住了
class Node {int value ; // 树中存储的数据Node firstChild ; // 第一个孩子引用Node nextBrother ; // 下一个兄弟引用}
结构图
- 空树
- 只有根节点
- 只有左子树
- 只有右子树
- 左右子树均在
两种特殊的二叉树
则对于 序号为 i 的结点有 :若 i>0 , 双亲序号: (i-1)/2 ; i=0 , i 为根结点编号 ,无双亲结点若 2i+1<n ,左孩子序号: 2i+1 ,否则无左孩子若 2i+2<n ,右孩子序号: 2i+2
相关习题,练练手吧~
1. 某二叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该二叉树中的叶子结点数为( )A 不存在这样的二叉树B 200C 198D 1992. 在具有 2n 个结点的完全二叉树中,叶子结点个数为( )A nB n+1C n-1D n/23. 一个具有 767 个节点的完全二叉树,其叶子节点个数为()A 383B 384C 385D 3864. 一棵完全二叉树的节点数为 531 个,那么这棵树的高度为( )A 11B 10C 8D 12
// 孩子表示法class Node {int val ; // 数据域Node left ; // 左孩子的引用,常常代表左孩子为根的整棵左子树Node right ; // 右孩子的引用,常常代表右孩子为根的整棵右子树}// 孩子双亲表示法class Node {int val ; // 数据域Node left ; // 左孩子的引用,常常代表左孩子为根的整棵左子树Node right ; // 右孩子的引用,常常代表右孩子为根的整棵右子树Node parent ; // 当前节点的根节点}
(本文采用孩子表示法)
并且二叉树定义是递归式的,因此后序基本操作中基本都是按照该概念实现的。
public void createBinaryTree(){ BTNode node1 = new BTNode(1); BTNode node1 = new BTNode(2); BTNode node1 = new BTNode(3); BTNode node1 = new BTNode(4); BTNode node1 = new BTNode(5); BTNode node1 = new BTNode(6); root = node1; node1.left = node2; node2.left = node3; node1.right = node4; node4.left = node5; node5.right = node6; }
- NLR:前序遍历(Preorder Traversal 亦称先序遍历)——访问根结点--->根的左子树--->根的右子树。
- LNR:中序遍历(Inorder Traversal)——根的左子树--->根节点--->根的右子树。
- LRN:后序遍历(Postorder Traversal)——根的左子树--->根的右子树--->根节点。
1. 某完全二叉树按层次输出(同一层从左到右)的序列为 ABCDEFGH 。该完全二叉树的前序序列为 ( )A: ABDHECFG B: ABCDEFGH C: HDBEAFCG D: HDEBFGCA2. 二叉树的先序遍历和中序遍历如下:先序遍历: EFHIGJK; 中序遍历: HFIEJKG. 则二叉树 根结点为 ()A: E B: F C: G D: H3.设一课二叉树的中序遍历序列: badce ,后序遍历序列: bdeca ,则二叉树前序遍历序列为 ()A: adbce B: decab C: debac D: abcde4. 某二叉树的后序遍历序列与中序遍历序列相同,均为 ABCDEF ,则按层次输出 ( 同一层从左到右 ) 的序列为 ()A: FEDCBA B: CBAFED C: DEFCBA D: ABCDEF
对于二叉树有以下常见操作,会在二叉树下篇经典面试题中讲解。
// 获取树中节点的个数int size ( Node root );// 获取叶子节点的个数int getLeafNodeCount ( Node root );// 子问题思路 - 求叶子结点个数// 获取第 K 层节点的个数int getKLevelNodeCount ( Node root , int k );// 获取二叉树的高度int getHeight ( Node root );// 检测值为 value 的元素是否存在Node find ( Node root , int val );// 层序遍历void levelOrder ( Node root );// 判断一棵树是不是完全二叉树boolean isCompleteTree ( Node root );
初始二叉树就到这里啦,刚了解二叉树概念性东西比较多,多看几遍就记住了。关注我,下篇讲解二叉树的多种遍历方式及多道经典面试题。不要错过喔
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。