求二叉树中指定节点的深度

 1 package job.huawei;
 2
 3 import java.util.Scanner;
 4
 5 public class TreeHigh {
 6
 7     /**
 8      * 输入字符串如a1b2c2d3e3f3g4构成一颗二叉树数字表示前一个字符所在的层,最多不超过9层
 9      * 求指定节点的深度
10      */
11     public static void main(String[] args) {
12         // TODO Auto-generated method stub
13         Scanner cin=new Scanner(System.in);
14         String str=cin.next();
15         String findChar=cin.next();
16         cin.close();
17         char tree[]=new char[512];
18         createTree(str,tree);
19         for(int i=0;i<findChar.length();i++){
20             System.out.print(getNodeHigh(tree,str,findChar.charAt(i))+" ");
21         }
22     }
23     /**
24      * 根据输入的字符串,顺序存储树
25      * @param str
26      * @param tree
27      */
28     public static void createTree(String str,char tree[]){
29         int k=0,count=0,j=0;
30         for(int i=1;i<str.length();i+=2){
31             j=Integer.parseInt(String.valueOf(str.charAt(i)));//取某节点所在层
32
33             if(i>1)
34             {
35                 count=str.charAt(i)!=str.charAt(i-2)?0:count+1;//判断是否在同一层,同一层则count+1,否则count=0
36
37             }
38             k=(int)Math.pow(2, j-1)+count;////计算节点的存储位置
39
40             tree[k]=str.charAt(i-1);
41         }
42     }
43     /**
44      * 求指定节点在树中的深度
45      * @param tree
46      * @param str
47      * @param x
48      * @return
49      */
50     public static int getNodeHigh(char tree[],String str,char x) {
51         int index=str.indexOf(String.valueOf(x));//判断该字符是否在树中,不在则直接返回
52
53         if(index<0) return 0;
54
55         int d=Integer.parseInt(String.valueOf(str.charAt(index+1))),level=0;//获取节点所在层次
56
57         while(2*d<tree.length&&tree[2*d]!=tree[0]){
58             level++;
59             d=2*d;
60         }
61         return level+1;
62     }
63 }
时间: 2024-08-03 20:46:41

求二叉树中指定节点的深度的相关文章

4.6 找出二叉树中指定节点的下一个节点(中序后继),假定每个节点有父指针。

5 / 2 6 / \ 1 4 7 / 3 class Node{ Node left; Node right; Node parent; int val; } /** 1.如果有右子树,则结果为右子树的最左节点. 2.如果没有右子树,则需要回到父节点,如果当前节点是父节点的左子树,则父节点就是结果,如果不是继续向上再找父节点. */ public TreeNode inorderSucc(TreeNode n){ if(n==null) return null; if(n.right!=nul

求二叉树中叶子节点的个数

求二叉树中叶子节点的个数 面试题二叉树 题目描述 求二叉树中叶子节点的个数. 叶子节点的定义:如果一个节点既没有左孩子,也没有右孩子,则该节点为叶子节点. 示例: 3 / 9 20 / 15 7 在这个二叉树中,叶子节点有 9,15,7,所以返回 3. Java 实现 class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; } } class Solution { public int

C++算法之 求二叉树中叶子节点的个数 与 判断两棵二叉树是否结构相同

//叶子节点的个数 /* (1)如果二叉树为空,返回0 (2)如果二叉树不为空且左右子树为空,返回1 (3)如果二叉树不为空,且左右子树不同时为空,返回左子树中叶子节点个数加上右子树中叶子节点个数 */ int GetLeafNodeNum(BTree* root) { if(root == NULL) return 0; if(root->m_pLeft == NULL && root->m_pRight == NULL) return 1; int LeafNumOfLef

【编程题目】求二叉树中节点的最大距离

第 11 题(树)求二叉树中节点的最大距离...如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数.写一个程序,求一棵二叉树中相距最远的两个节点之间的距离. 思路:二叉树结构中只设了左右子节点的指针. 设单个结点的深度为0. 用后序遍历,得到每个结点为根的子树的最大深度.maxdistance记录该结点(左子树深度+右子树深度 + 2)是否超过已有的最远距离,若超过更新. 关键:空指针的深度设为-1,这样避免了复杂的分类讨论. 树每个结

11求二叉树中节点的最大距离

转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4253605.html 声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己也方便有类似问题的朋友,本文的思想也许有所借鉴,但源码均为本人实现,如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明.谢谢. 题目:如果我们把二叉树看成一个图,一棵树显示是一颗有向无环图,定义"距离"为两节点之间边的个数(不考虑方向).写一个程序,求一棵二叉树中相距最远的两个节点

编程之美之求二叉树中节点的最大距离

题目:如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数.写一个程序求一棵二叉树中相距最远的两个节点之间的距离. 分析:树上分析的很清楚,计算一个二叉树的最大距离有两个情况: 1. 路径经过左子树的最深节点,通过根节点,再到右子树的最深节点. 2. 路径不穿过根节点,而是左子树或右子树的最大距离路径,取其大者. 但是树上的代码使用了额外的节点字段,这里给出我的代码,思路是一样的: struct BinaryTree { int valu

编程之美3.8 求二叉树中节点的最大距离

描述:如果把二叉树看成一个图,父子节点之间的连线看成双向的,定义“距离”为两个节点之间边的个数.求二叉树中相距最远的两个节点的距离. 思路:相距最远的两个节点一定是叶子节点,且这两个叶子节点的路径有两种情况: 1. 该路径经过root节点,则两个叶子节点分属root.left和root.right为根的子树,而且是两个子树中距离root.left和root.right最远的叶子节点: 2. 该路径不经过root节点,则这两个叶子节点的root.left或root.right上: 根据以上分析,参

11.求二叉树中节点的最大距离

如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义 " 距离 " 为两节点之间边的个数.写一个程序,求一棵二叉树中相距最远的两个节点之间的距离,求二叉树中节点的最大距离 分析: 先画几个不同形状的二叉树,从例子中可以看出,相距最远的两个节点,一定是两个叶子节点,或者是一个叶子节点到它的根节点: 根据相距最远的两个节点一定是叶子节点这个规律,我们可以进一步讨论. 对于任意一个节点,以该节点为根,假设这个根有 K 个孩子节点,那么相距最远的两 个节点 U和 V之间的路

编程之美——3.8求二叉树中结点的最大距离(树,递归,动态规划)

<编程之美>读书笔记12: 3.8 求二叉树中节点的最大距离 问题: 如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数.写一个程序求一棵二叉树中相距最远的两个节点之间的距离. 实际上就是求树的直径.若采用“动态规划方法”思想,会将该问题分解成“具有最大距离两点间的路径是否经过根节点”两个子问题,然后再对这两个子问题求解判断.实际上,不必这么麻烦.距离最远的两点必然在以某个节点A为根的子树上,它们间的路径必然经过该子树的根节