二叉树的类由节点值,左子树和右子树组成
二叉树的基本方法-四种遍历
1.先序遍历 - 根左右 - ABDEHCFG 先序遍历的第一个节点一定是根结点(没有父节点的节点)
2.中序遍历 - 左根右 - DBEHAFCG 中序遍历根节点左边全是左子树中序遍历的结果,根节点的右边一定是右子树中序遍历的结果
3.后序遍历 - 左右根 - DHEBFGCA 后序遍历的最后一个节点一定是根节点
4.层序遍历 -
二叉树遍历的还原(后序+先序 不能还原)
1.后序+中序
1)先找出后序遍历的最后一个节点,该节点是根节点A
2)再把根节点对应到中序遍历结果中, 根节点左边的就是左子树中序遍历的结果DBEH,根节点右边的就是右子树中序遍历的结果FCG
3)把左子树DBEH对应到后序遍历中去,左子树的后序遍历就是DHEB,中序右子树FCG对应的后序右子树遍历就是FGC,再依次类推,B就是左子树的根节点,C就是右子树的根节点
2.先序+中序
1)先找出先序遍历的最前面的一个节点就收根节点A,
2) 再把根节点A对应的中序遍历的结果中,根节点A左边就是左子树中序遍历的结果,根节点右边就是右子树中序遍历的结果,
3)再把中序遍历的左右子树在先序遍历结果里对应,BDEH就是左子树先序遍历的,CFG就是右子树先序遍历的,在以此类推,B就是左子树的根节点,C就是右子树的根节点
总结:
后序/先序 + 中序 可以还原出原始的二叉树
1)根据后序遍历/先序结果,找到根节点
2)根据根节点去中序中查看,区分出谁是左子树,谁是右子树
3) 根据中序,知道了左右子树之后,再去后序中找对应的子树后序结果
方法说明:
size() - 获取树中结点的个数 - 通过递归来完成,递归的初始条件是 root==null 时 return 0 递归公式是1 +size(root.left) + size(root.right) 树的节点个数等于1+左子树的节点个数+右子树的节点个数
getLeafCount(TreeNode root) - 获取叶子节点的个数 - 递归来完成 - 初始条件是空树情况下root==null叶子节点的个数显然为0,当root的左右子树都为空时该节点root就是叶子节点 , 递推公式时 getLeafCount(root.left) + getLeafCount(root.right),一棵树的叶子节点就是左子树和右子树的叶子节点相加
getKLevelCount(TreeNode root , int k) - 获取第k层的叶子节点个数- 初始条件是if(root==null || k<=k)return 0 ,if(k ==1 )return 1 - 递推公式是 一棵树的第k层叶子节点个数==左子树第k-1层+右子树的第k-1层的叶子节点个数
getHeight(TreeNode root) - 获取书的最大高度 - 初始条件root == null return 0 ;root.left == null && root.right == null return1;递推公式1+Math.max(getHeight(root.left) , getHeight(root.right),
find(TreeNode root , int val) - 查找节点 - 也是通过递归来实现的,先判定树为空的情况,返回null,再判定该树的节点值是否等于val ,等于就直接返回,未找到再递归左子树,左子树没有再找右子树