二叉树查找指定节点思路
前序查找思路
当前节点是否为空,不为空判断当前节点的rank是否等于要查找的rank
若等于,则返回当前节点;
若不等于,则判断当前节点的左子节点是否为空,
如果不为空,则继续向左递归前序查找,如果左递归前序查找,
找到了节点,则返回;
若没找到,则继续判断当前节点的右子节点是否为空,
如果不为空,则继续向右递归前序查找,如果右递归前序查找,找到了节点,则返回。若没找到则为空。
class TreeNode {
public int rank;
public String name;
public TreeNode left;
public TreeNode right;
public TreeNode ( int rank, String name) {
this . rank = rank;
this . name = name;
}
@Override
public String toString ( ) {
return "TreeNode{" +
"rank=" + rank +
", name='" + name + '\'' +
'}' ;
}
}
class BinaryTree {
public static TreeNode preOrderTraversalSearch ( TreeNode node, int rank) {
if ( node != null) {
if ( node. rank == rank) {
return node;
}
}
TreeNode resultNode = null;
if ( node. left != null) {
resultNode = preOrderTraversalSearch ( node. left, rank) ;
if ( resultNode != null) {
return resultNode;
}
}
if ( node. right != null) {
resultNode = preOrderTraversalSearch ( node. right, rank) ;
if ( resultNode != null) {
return resultNode;
}
}
return resultNode;
}
}
public class BinaryTreeDemo {
public static void main ( String[ ] args) {
BinaryTree binaryTree = new BinaryTree ( ) ;
TreeNode root = new TreeNode ( 1 , "宋江" ) ;
TreeNode node2 = new TreeNode ( 2 , "卢俊义" ) ;
TreeNode node3 = new TreeNode ( 3 , "吴用" ) ;
TreeNode node4 = new TreeNode ( 4 , "公孙胜" ) ;
TreeNode node5 = new TreeNode ( 5 , "关胜" ) ;
TreeNode node6 = new TreeNode ( 6 , "林冲" ) ;
root. left = node3;
root. right = node2;
node2. right = node4;
node2. left = node5;
node3. right = node6;
TreeNode node = binaryTree. preOrderTraversalSearch ( root, 5 ) ;
System. out. println ( "获取到的节点: " + node) ;
}
}
中序查找思路
判断当前节点是否为空,不为空,
则判断当前节点的左子节点是否为空,左子节点不为空则中序递归遍历查找,若找到了要查找的节点,则返回;
若没找到,则判断当前节点,若找到了节点,则返回;
若不是,则判断当前节点的右子节点是否为空,右子节点不为空则中序递归遍历查找,若找到了节点,则返回
class TreeNode {
public int rank;
public String name;
public TreeNode left;
public TreeNode right;
public TreeNode ( int rank, String name) {
this . rank = rank;
this . name = name;
}
@Override
public String toString ( ) {
return "TreeNode{" +
"rank=" + rank +
", name='" + name + '\'' +
'}' ;
}
}
class BinaryTree {
public static TreeNode inOrderTraversalSearch ( TreeNode node, int rank) {
if ( node == null) {
return null;
}
TreeNode treeNode = null;
if ( node. left != null) {
treeNode = inOrderTraversalSearch ( node. left, rank) ;
if ( treeNode != null) {
return treeNode;
}
}
System. out. println ( node) ;
if ( node. rank == rank) {
return node;
}
if ( node. right != null) {
treeNode = inOrderTraversalSearch ( node. right, rank) ;
if ( treeNode != null) {
return treeNode;
}
}
return treeNode;
}
}
public class BinaryTreeDemo {
public static void main ( String[ ] args) {
BinaryTree binaryTree = new BinaryTree ( ) ;
TreeNode root = new TreeNode ( 1 , "宋江" ) ;
TreeNode node2 = new TreeNode ( 2 , "卢俊义" ) ;
TreeNode node3 = new TreeNode ( 3 , "吴用" ) ;
TreeNode node4 = new TreeNode ( 4 , "公孙胜" ) ;
TreeNode node5 = new TreeNode ( 5 , "关胜" ) ;
TreeNode node6 = new TreeNode ( 6 , "林冲" ) ;
root. left = node3;
root. right = node2;
node2. right = node4;
node2. left = node5;
node3. right = node6;
TreeNode node = binaryTree. inOrderTraversalSearch ( root, 10 ) ;
System. out. println ( "获取到的节点: " + node) ;
}
}
后续查找思路
判断当前节点是否为空,不为空,
则判断当前节点的左子节点是否为空,左子节点不为空则中序递归遍历查找,若找到了要查找的节点,则返回;
若不是,则判断当前节点的右子节点是否为空,右子节点不为空则中序递归遍历查找,若找到了节点,则返回;
若没找到,则判断当前节点,若找到了节点,则返回
class TreeNode {
public int rank;
public String name;
public TreeNode left;
public TreeNode right;
public TreeNode ( int rank, String name) {
this . rank = rank;
this . name = name;
}
@Override
public String toString ( ) {
return "TreeNode{" +
"rank=" + rank +
", name='" + name + '\'' +
'}' ;
}
}
class BinaryTree {
public TreeNode postOrderTraversalSearch ( TreeNode node, int rank) {
if ( node == null) {
return null;
}
TreeNode treeNode = null;
if ( node. left != null) {
treeNode = postOrderTraversalSearch ( node. left, rank) ;
if ( treeNode != null) {
return treeNode;
}
}
if ( node. right != null) {
treeNode = postOrderTraversalSearch ( node. right, rank) ;
if ( treeNode != null) {
return treeNode;
}
}
if ( node. rank == rank) {
return node;
}
return treeNode;
}
}
public class BinaryTreeDemo {
public static void main ( String[ ] args) {
BinaryTree binaryTree = new BinaryTree ( ) ;
TreeNode root = new TreeNode ( 1 , "宋江" ) ;
TreeNode node2 = new TreeNode ( 2 , "卢俊义" ) ;
TreeNode node3 = new TreeNode ( 3 , "吴用" ) ;
TreeNode node4 = new TreeNode ( 4 , "公孙胜" ) ;
TreeNode node5 = new TreeNode ( 5 , "关胜" ) ;
TreeNode node6 = new TreeNode ( 6 , "林冲" ) ;
root. left = node3;
root. right = node2;
node2. right = node4;
node2. left = node5;
node3. right = node6;
TreeNode node = binaryTree. postOrderTraversalSearch ( root, 5 ) ;
System. out. println ( "获取到的节点: " + node) ;
}
}