Java实现二叉树的相关操作
来源:互联网 发布:云南地税网络申报平台 编辑:程序博客网 时间:2024/05/01 05:57
// 求二叉树的深度 public static int BiTreeDepth(BitNode T) { int depthval, depthLeft, depthRight; if (T == null) depthval = 0; else if (T.lchild == null && T.rchild == null) depthval = 1; else { depthLeft = BiTreeDepth(T.lchild); depthRight = BiTreeDepth(T.rchild); depthval = 1 + (depthLeft > depthRight ? depthLeft : depthRight); } return depthval; }// 求data所对应结点的层数,如果对象不在树中,结果返回-1;否则结果返回该对象在树中所处的层次,规定根节点为第一层 public static int level(BitNode bitNode, int data) { int leftLevel, rightLevel; if (bitNode == null) return -1; if (data == bitNode.data) return 1; leftLevel = bitNode.lchild == null ? -1 : level(bitNode.lchild, data); rightLevel = bitNode.rchild == null ? -1 : level(bitNode.rchild, data); if (leftLevel < 0 && rightLevel < 0) return -1; return leftLevel > rightLevel ? leftLevel + 1 : rightLevel + 1; } // 求二叉树叶子节点的总数 public static int leafNum(BitNode tree) { if (tree == null) return 0; else { int left = leafNum(tree.lchild); int right = leafNum(tree.rchild); if (tree.lchild == null && tree.rchild == null) return left + right + 1; else return left + right; } } // 求二叉树父节点个数 public static int fatherNodes(BitNode tree) { if (tree == null || (tree.lchild == null && tree.rchild == null)) return 0; else { int left = fatherNodes(tree.lchild); int right = fatherNodes(tree.rchild); return left + right + 1; } } // 求只有一个孩子结点的父节点个数 public static int oneChildFather(BitNode tree) { int left, right; if (tree == null || (tree.rchild == null && tree.lchild == null)) return 0; else { left = oneChildFather(tree.lchild); right = oneChildFather(tree.rchild); if ((tree.lchild != null && tree.rchild == null) || (tree.lchild == null && tree.rchild != null)) return left + right + 1; else return left + right;/* 加1是因为要算上根节点 */ } } // 求二叉树只拥有左孩子的父节点总数 public static int leftChildFather(BitNode tree) { if (tree == null) return 0; else { int left = leftChildFather(tree.lchild); int right = leftChildFather(tree.rchild); if ((tree.lchild != null && tree.rchild == null)) return left + right + 1; else return left + right; } } // 求二叉树只拥有左孩子的父节点总数 public static int rightChildFather(BitNode tree) { if (tree == null) return 0; else { int left = leftChildFather(tree.lchild); int right = leftChildFather(tree.rchild); if ((tree.lchild == null && tree.rchild != null)) return left + right + 1; else return left + right; } } // 计算有两个节点的父节点的个数 public static int doubleChildFather(BitNode tree) { int left, right; if (tree == null) return 0; else { left = doubleChildFather(tree.lchild); right = doubleChildFather(tree.rchild); if (tree.lchild != null && tree.rchild != null) return (left + right + 1);/* 加1是因为要算上根节点 */ else return (left + right); } } // 将树中的每个节点的孩子对换位置 public static void exChange(BitNode tree) { if (tree == null) return; if (tree.lchild != null) exChange(tree.lchild); if (tree.rchild != null) exChange(tree.rchild); BitNode temp = tree.lchild; tree.lchild = tree.rchild; tree.rchild = temp; } // 递归求所有结点的和 public static int getSumByRecursion(BitNode tree) { if (tree == null) { return 0; } else { int left = getSumByRecursion(tree.lchild); int right = getSumByRecursion(tree.rchild); return tree.data + left + right; } }
6 0
- Java实现二叉树的相关操作
- java实现二叉查找树以及相关操作
- Java实现二叉搜索树及相关操作
- java实现二叉搜索树(BST)相关操作
- 二叉树的相关操作
- 二叉树的相关操作
- 二叉树的相关操作
- 二叉树的相关操作
- 二叉树的相关操作
- 二叉树的相关操作
- 二叉树的相关操作
- 二叉树的相关操作
- 二叉树的相关操作
- 二叉树的相关操作
- 二叉树的相关操作
- 二叉树的相关操作
- 二叉树的实现及相关操作C/C++
- java实现二叉树的常见操作
- 模拟 hdu5414 CRB and String
- jQuery上传插件uploadify判断文件是否存在
- NIST SP800系列标准
- PL/SQL Developer主界面窗口默认设置
- Android SDK Manager下载
- Java实现二叉树的相关操作
- iOS学习笔记-Objective-C-类和对象
- 小议C和C++中的const类型限定符
- Problem C ytaaa(01背包)
- Android 中 ListAactivity 和Activity 使用ListView 以及ArrayAdapter和SimpleAdapter参数详解
- FPGA学习
- 静态链接和动态链接
- 谈R软件中的STL分解
- 请用LinkedList模拟栈数据的集合,并测试