二叉搜索树的经典问题-读《程序员面试攻略》
来源:互联网 发布:步步高hcd198软件下载 编辑:程序博客网 时间:2024/06/04 17:57
关于二叉树的简明遍历以及一个非常经典的问题实现,读自《程序员面试攻略》简洁明了的遍历:
void PreOrderTraversal(Node root)//先根遍历
{
if(root == null)
{
return;
}
void PreOrderTraversal(Node root)//先根遍历
{
if(root == null)
{
return;
}
root.printValue();
PreOrderTraversal(root.getLeft());
PreOrderTraversal(root.getRight());
}
PreOrderTraversal(root.getLeft());
PreOrderTraversal(root.getRight());
}
void InOrderTraversal(Node root)//中根遍历
{
if(root == null)
{
return;
}
{
if(root == null)
{
return;
}
PreOrderTraversal(root.getLeft());
root.printValue();
PreOrderTraversal(root.getRight());
}
root.printValue();
PreOrderTraversal(root.getRight());
}
void PostOrderTraversal(Node root)//后根遍历
{
if(root == null)
{
return;
}
{
if(root == null)
{
return;
}
PreOrderTraversal(root.getLeft());
PreOrderTraversal(root.getRight());
root.printValue();
}
PreOrderTraversal(root.getRight());
root.printValue();
}
问题:给定一棵二叉搜索树中的两个节点的值,找到它们的最近共同祖先。可以假定这两个值都在这棵树中。
[分析:二叉搜索树是排序好的二叉树,只要找到最后一个节点使得这两个值都在该节点同一子树下,然后根据值判断是左还是右子树,而该子树的节点就是问题中要找的节点]
Node FindLowestCommonAncestor(Node root, int value1, int value2)
{
while(root != null)
{
int value = root.getValue();
[分析:二叉搜索树是排序好的二叉树,只要找到最后一个节点使得这两个值都在该节点同一子树下,然后根据值判断是左还是右子树,而该子树的节点就是问题中要找的节点]
Node FindLowestCommonAncestor(Node root, int value1, int value2)
{
while(root != null)
{
int value = root.getValue();
if(value > value1 && value > value2)
{
root = root.getLeft();
}
else if(value < value1 && value < value2)
{
root = root.getRight();
}
else
{
return root;
}
}
{
root = root.getLeft();
}
else if(value < value1 && value < value2)
{
root = root.getRight();
}
else
{
return root;
}
}
return null;
}
}
本文出自 “bluefish” 博客,请务必保留此出处http://bluefish.blog.51cto.com/214870/68534
- 二叉搜索树的经典问题-读《程序员面试攻略》
- 链表的几个经典问题-读《程序员面试攻略》
- 关于字符串的经典问题-读《程序员面试攻略》
- [面试 数据结构] 经典的二叉搜索树
- 程序员面试经典--二叉查找树节点的“下一个结点”
- 程序员面试经典--判断二叉查找树
- 面试经典(25)--二叉查找树(搜索树)
- 笔试面试算法经典--二叉搜索树转有序的双向链表(Java)
- 一道程序员面试的经典悖论问题
- 二叉树平衡检查之程序员面试经典
- 程序员面试经典--检查二叉树是否平衡
- 程序员面试经典--创建最小二叉查找树
- 程序员面试经典--创建二叉树层结点链表
- 【程序员面试】5个经典的前端面试问题
- 程序员经典面试回答,怎样回答面试官的问题
- 面试经典二叉树算法
- java程序员面试被问到的经典多线程问题
- 面试的经典问题
- 参加2010年磨房《在路上 - 十年》百公里徒步活动小记
- Java Back Propagation Neural Network(JAVA反向传播神经网络)
- 初到深圳印象
- IMAGiS适普三维GIS软件交流下载
- equals() and HashCode()
- 二叉搜索树的经典问题-读《程序员面试攻略》
- HALCON 9.0 简体中文版机器视觉软件交流共享
- 如何成为一个合格的C++程序?
- 进程管理之进程创建和删除(二)
- 一步一步学Linq to sql
- LRC歌词分析函数增强版
- 通用分页存储过程
- 链表的几个经典问题-读《程序员面试攻略》
- Linux/ubuntu下编辑/etc/fstab实现开机自动挂载分区方法