二叉树查找指定节点思路
前序查找思路
当前节点是否为空,不为空判断当前节点的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);
}
}