当前位置: 首页 > news >正文

网站开发公司 优帮云百度快速优化推广

网站开发公司 优帮云,百度快速优化推广,shopnc本地生活o2o网站源码,go网站开发专栏:数据结构(Java版) 个人主页:手握风云 目录 一、二叉树的遍历 1.1. 前序遍历 1.2. 中序遍历 1.3. 后序遍历 1.4. 完整代码 二、二叉树的基本操作 2.1. 获取树中结点个数 2.1. 获取叶子结点个数 2.3. 获取第k层结点的个数 2.4. 获取二叉树的…

专栏:数据结构(Java版)

个人主页:手握风云

目录

一、二叉树的遍历

1.1. 前序遍历

1.2. 中序遍历

1.3. 后序遍历

1.4. 完整代码

二、二叉树的基本操作

2.1. 获取树中结点个数

2.1. 获取叶子结点个数

2.3. 获取第k层结点的个数

2.4. 获取二叉树的高度

2.5. 检测值为value的元素是否存在


一、二叉树的遍历

1.1. 前序遍历

        前序遍历又叫先根遍历。每一个节点的遍历顺序都是按照“根——>左子树——>右子树”的顺序来遍历,每遇到一个新的结点都看作是一棵新的树。如果遇到空,则递归回上一个节点。A的右子树遍历过程也如下,所以前序遍历的结果为“ABDCEF”。

1.2. 中序遍历

       中序遍历的顺序为“左子树——>根——>右子树”,遇到一个结点,先去遍历左子树,如果该节点的根为空,才能递归回来进行打印。所以中序遍历的结果为“DBAECF”。

1.3. 后序遍历

        后序遍历的顺序为“左子树——>右子树——>根”,遍历过程与上面两种都差不多,这里不再多说。后序遍历的顺序为“DBEFCA”。

1.4. 完整代码

public class BinaryTree {static class TreeNode{public char val;public TreeNode left;public TreeNode right;public TreeNode(char val) {this.val = val;}}public TreeNode CreateTree(){TreeNode A = new TreeNode('A');TreeNode B = new TreeNode('B');TreeNode C = new TreeNode('C');TreeNode D = new TreeNode('D');TreeNode E = new TreeNode('E');TreeNode F = new TreeNode('F');A.left = B;A.right = C;B.left = D;C.left = E;C.right = F;return A;}public void PrevOrder(TreeNode root){//前序遍历if(root == null){return;}System.out.print(root.val+" ");PrevOrder(root.left);PrevOrder(root.right);}public void InOrder(TreeNode root){//中序遍历if(root == null){return;}InOrder(root.left);System.out.print(root.val+" ");InOrder(root.right);}public void PostOrder(TreeNode root){//后序遍历if(root == null){return;}PostOrder(root.left);PostOrder(root.right);System.out.print(root.val+" ");}
}
public class Test {public static void main(String[] args) {BinaryTree binaryTree = new BinaryTree();BinaryTree.TreeNode root = binaryTree.CreateTree();System.out.print("前序遍历:");binaryTree.PrevOrder(root);System.out.println();System.out.print("中序遍历:");binaryTree.InOrder(root);System.out.println();System.out.print("后序遍历:");binaryTree.PostOrder(root);}
}

二、二叉树的基本操作

2.1. 获取树中结点个数

     我们先回想以下如何获取链表中的结点个数。我们定义一个ListNode cur变量,当cur不为空时,count递增。同样的,我们上面已经实现了二叉树结点的遍历,我们也只需要再定义一个计数器,只要root不为空,countNode就递增。

    public void NodeSize(TreeNode root){if(root == null){return;}CountSize++;NodeSize(root.left);NodeSize(root.right);}

       上面的是遍历思路,还有一种子问题思路。整棵树的结点个数等于左树的结点数和右树的结点数再加一,只要root为空,那么我们就可以结束递归。

    public int NodeSize2(TreeNode root){if(root == null){return 0;}int tmp = NodeSize2(root.left)+NodeSize2(root.right)+1;return tmp;}

2.1. 获取叶子结点个数

       叶子结点就是没有左右子树的结点,递推公式为左子树叶子结点加右子树结点,结束条件为结点的左右子树都为空。

    //获取叶子结点个数public int getLeafNodeCount(TreeNode root){if(root == null){return 0;}else if(root.left == null && root.right == null){return 1;}else{return getLeafNodeCount(root.left)+ getLeafNodeCount(root.right);}}public int LeafCount;//遍历问题public void getLeafNodeCount2(TreeNode root){if(root == null){return;}if(root.left == null && root.right == null){LeafCount++;}getLeafNodeCount2(root.left);getLeafNodeCount2(root.right);}

2.3. 获取第k层结点的个数

        比如我们要想获取第3层结点的个数,就要求root.left第2层和root.right的第二层,相当于左树的第一层和右树的第一层。当k=1时,已经找到这一层,此时也是递归的结束条件。

    //获取第k层结点的个数public int getLevelNodeCount(TreeNode root,int k){if(root == null){return 0;}if(k == 1){return 1;}return getLevelNodeCount(root.right,k-1) +getLevelNodeCount(root.left,k-1);}

2.4. 获取二叉树的高度

         求二叉树的高度,整棵树的高度等于左子树高度的最大值或者右子树高度的最大值加一,当root为空的时候,高度为0。由于我们不知道是左子树高还是右子树高,所以两边都需要遍历。

    //获取二叉树的高度public int getHeight(TreeNode root){if(root == null){return 0;}int leftH = getHeight(root.left);int rightH = getHeight(root.right);return Math.max(leftH,rightH) + 1;}

2.5. 检测值为value的元素是否存在

        我们先检查根结点是不是,然后再遍历左子树和右子树,当我们找到了val值,直接返回,不用再递归下面了。

    // 检测值为value的元素是否存在public TreeNode find(TreeNode root,int val){if(root == null){return null;}if(root.val == val){return root;}TreeNode leftVal = find(root.left,val);if(leftVal != null){return leftVal;}TreeNode rightVal = find(root.right,val);if(rightVal != null){return rightVal;}return null;}
public class Solution {public static void main(String[] args) {BinaryTree binaryTree = new BinaryTree();BinaryTree.TreeNode root = binaryTree.CreatTree();binaryTree.NodeSize(root);System.out.println("结点个数:"+binaryTree.CountSize);System.out.println("结点个数:"+binaryTree.NodeSize2(root));System.out.println("叶子结点个数:"+binaryTree.getLeafNodeCount(root));binaryTree.getLeafNodeCount2(root);System.out.println("叶子结点个数:"+binaryTree.LeafCount);System.out.println("第3层结点个数:"+binaryTree.getLevelNodeCount(root,3));System.out.println("二叉树的高度:"+binaryTree.getHeight(root));}
}

http://www.hkea.cn/news/83268/

相关文章:

  • 运城市做网站英文seo外链
  • 江宁网站建设如何建立网上销售平台
  • 淄博企业网站建设有限公司搜索引擎关键词竞价排名
  • 网站的优点企业专业搜索引擎优化
  • 哪里有软件开发培训机构无锡seo培训
  • 网站怎么做反链seo是什么品牌
  • 技术型网站做哪一种好软文范例大全100
  • 百度搜索什么关键词能搜到网站seo高效优化
  • 网站搭建分站需要多少钱互联网营销策划
  • 音乐网站的音乐怎么做seo先上排名后收费
  • 清河做网站报价seo实战培训王乃用
  • wordpress 回收站在哪个文件夹营销方式和手段
  • 垂直型电商网站如何做快速排名软件哪个好
  • 做产品推广有网站比较好的免费自助建站平台
  • 番禺网站建设公司排名百度推广页面投放
  • 沈阳做微网站百度收录刷排名
  • 网站建设与管理技术发展seo是什么意思如何实现
  • 手机游戏开发制作公司最新seo视频教程
  • 网站优化过度被k长春seo排名公司
  • wordpress移除谷歌字体seo网站推广与优化方案
  • 十大景观设计公司排名seo权重查询
  • 水友做的yyf网站十大免费引流平台
  • 东莞公司网站制作百度识图网页版 在线
  • 企业级网站内容管理解决方案网站关键词快速排名服务
  • 影视采集网站怎么做收录关键词是网站seo的核心工作
  • 开发一个网站需要多少时间百度账号免费注册
  • 化妆品网站主页设计长沙关键词优化方法
  • 南阳建网站企业百度推广优化工具
  • 怎样把自己做的网页放在网站里如何做宣传推广营销
  • 七谷网络工作室重庆优化seo