二叉树查找

二叉树查找主要有三种:前序查找、中序查找、后序查找

 

三种查找的思路分析:

 

  • 前序查找:
  1. 先判断当前的结点node是否等于要查找的
  2. 如果是相等,则返回当前结点
  3. 如果不相等,则判断当前结点的左子结点是否为空,如果不为空,则递归前序查找
  4. 如果左递归前序查找,找到结点,则返回,否则继续判断,当前结点的右子结点是否为空,如果不空,则继续向右递归前序查找,如果找到则返回,否则没有找到。
  • 中序查找:
  1. 判断当前结点的左子结点是否为空,如果不为空,则递归中序查找
  2. 如果找到则返回,如果没有找到,就和当前结点比较,如果是则返回当前结点,否则继续进行右递归中序查找
  3. 如果右递归中序查找找到则返回,否则返回nul
  • 后序查找:
  1. 判断当前结点的左子结点是否为空,如果不为空,则递归后序查找
  2. 如果找到则返回,如果没有找到,就判断当前结点的右子结点是否为空,如果不为空,则右递归后序查找,如果找到就返回,如果没有找到
  3. 就和当前结点进行比较,如果找到则返回,否则返回nul

 前序遍历代码实现

1. public class PostSearch {  
2.     /** 
3.      * @param root 二叉树的根节点 
4.      * @param id   要查找的id 
5.      * @return 查找到则返回对应id的Boy节点信息,没有查找则返回null 
6.      */  
7.     public static Boy postSearch(Boy root, char id) {  
8.         Boy temp = null 
9.         if (root.getId() == id) {//一开始就判断root节点是否为要查找的节点  
10.             return root;  
11.         }  
12.         //判断当前结点的左子节点是否为空,如果不为空,则递归前序查找  
13.         if (root.getLeft() != null) {  
14.             temp = postSearch(root.getLeft(), id);  
15.         }  
16.         //2.如果左递归前序查找,找到结点,则返回  
17.         if (temp != null) {//说明我们左子树找到  
18.             return temp;  
19.         }  
20.         //若以上temp为null,则继续判断:  
21.         //当前的结点的右子节点是否为空,如果不空,则继续向右递归前序查找  
22.         if (root.getRight() != null) {  
23.             temp = postSearch(root.getRight(), id);  
24.         }  
25.         return temp;  
26.     }  
27. }  

中序遍历代码实现

1. public class InfixSearch {  
2.     public static Boy infixSearch(Boy boy, char id) {  
3.         Boy temp = null 
4.         if (boy.getLeft() != null) {  
5.             temp = infixSearch(boy.getLeft(), id);  
6.         }  
7.         if (temp != null) {  
8.             return temp;  
9.         }  
10.         if (boy.getId() == id) {  
11.             return boy;  
12.         }  
13.         if (boy.getRight() != null) {  
14.             temp = infixSearch(boy.getRight(), id);  
15.         }  
16.         return temp;  
17.     }  
18. }  

后序遍历代码实现

1. public class LastSearch {  
2.     public static Boy lastSearch(Boy root, char id) {  
3.         Boy temp = null;  
4.         if (root.getLeft() != null) {  
5.             temp = lastSearch(root.getLeft(), id);  
6.         }  
7.         if (temp != null) {  
8.             return temp;  
9.         }  
10.         if (root.getRight() != null) {  
11.             temp = lastSearch(root.getRight(), id);  
12.         }  
13.         if (temp != null) {  
14.             return temp;  
15.         }  
16.         if (root.getId() == id) {  
17.             return root;  
18.         }  
19.         return temp;  
20.   
21.     }  
22. }  
 
posted @ 2020-11-03 15:36  白刃天使  阅读(386)  评论(0编辑  收藏  举报