给出一棵二叉树的根节点和其中两个不同的节点求出它们最近的公共祖先节点
来源:互联网 发布:淘宝商城玩具大全 编辑:程序博客网 时间:2024/06/13 21:09
如题,这是一个很老的问题,我们采用类似后序遍历的方式,在找到一个节点后保存栈中的节点,已得到一条从根节点到当前节点的路径
代码如下
/** * 给出一棵二叉树的根节点以及其他两个不同节点,返回这两个不同节点的最近公共祖先节点 * @param n1,n2,root */public static void getClosetAncestor(BTNode root,int n1,int n2){BTNode[] st=new BTNode[255];BTNode p=root;int k=0;int flag=0;BTNode pre=null;BTNode[] st1=new BTNode[255];//用来存放n1节点的祖先节点int k1=0;BTNode[] st2=new BTNode[255];//用来存放n2节点的祖先节点int k2=0;if(p!=null){st[k++]=p;p=p.getLeft();while(k>0){while(p!=null){st[k++]=p;p=p.getLeft();}flag=1;pre=null;while(flag==1&&k>0){p=st[k-1];if(p.getRight()==pre){k--;if(p.getData()==n1){for(int i=0;i<k;i++){st1[k1++]=st[i];}}if(p.getData()==n2){for(int i=0;i<k;i++){st2[k2++]=st[i];}}pre=p;}else{p=p.getRight();flag=0;}}}}int t=0;while(t<k1-1&&t<k2-1){if((st1[t].getData()==st2[t].getData())&&(st1[t+1].getData()==st2[t+1].getData()))t++;elsebreak;}System.out.println(st1[t].getData());}
0 0
- 给出一棵二叉树的根节点和其中两个不同的节点求出它们最近的公共祖先节点
- 二叉树中两个节点的最近公共祖先节点
- 二叉树中两个节点的最近公共祖先节点
- 二叉树中两个节点的最近公共祖先节点
- 二叉树中两个节点的最近公共祖先节点
- 求二叉树中两个节点的最近公共祖先
- 求二叉树中两个节点的最近公共祖先
- 求二叉树中两个节点的最近公共祖先
- 求二叉树中两个节点的最近公共祖先
- 求二叉树中两个节点的最近公共祖先
- 二叉树中找到两个节点的最近公共祖先
- 找树中两个节点的最近公共祖先
- 寻找两个节点的最近公共祖先
- 求树中两个节点的最近公共祖先
- ~求两个节点的最近公共祖先~
- 查找两个节点最近的公共祖先
- 求两个节点最近的公共祖先
- 【转载】二叉树中两个节点的最近公共祖先节点
- 逆波兰表达式求值(Evaluate Reverse Polish Notation)
- XML基础总结2
- 简易计算器
- MFC学习笔记之CString
- [python]如何对字符串进行大小写转换
- 给出一棵二叉树的根节点和其中两个不同的节点求出它们最近的公共祖先节点
- 网络流Dinic模板
- 黑马程序员——15,String,StringBuffer,基本数据类型包装对象
- 【数据结构与算法】浅谈数据结构与算法
- static的作用(c)
- hdu5334
- 使用Facebook方法处理复杂问题
- iWatch报错: Fail to code sign "***" No valid signing identities (i.e. certificate and private key pair
- poj1328radar installation 【贪心】