public static int i = 1 , j = 1 , k = 1 ; public HeroNode preOrderSearch ( int no) { System. out. println ( "前序遍历" + ( i++ ) + "次" ) ; if ( this . no == no) { return this ; } HeroNode heroNode = null; if ( this . left != null) { heroNode = this . left. preOrderSearch ( no) ; } if ( heroNode != null) { return heroNode; } if ( this . right != null) { heroNode = this . right. preOrderSearch ( no) ; } return heroNode; } public HeroNode infixOrderSearch ( int no) { HeroNode heroNode = null; if ( this . left != null) { heroNode = this . left. infixOrderSearch ( no) ; } if ( heroNode != null) { return heroNode; } System. out. println ( "中序遍历" + ( j++ ) + "次" ) ; if ( this . no == no) { return this ; } if ( this . right != null) { heroNode = this . right. infixOrderSearch ( no) ; } return heroNode; } public HeroNode postOrderSearch ( int no) { HeroNode heroNode = null; if ( this . left != null) { heroNode = this . left. postOrderSearch ( no) ; } if ( heroNode != null) { return heroNode; } if ( this . right != null) { heroNode = this . right. postOrderSearch ( no) ; } if ( heroNode != null) { return heroNode; } System. out. println ( "后序遍历" + ( k++ ) + "次" ) ; if ( this . no == no) { return this ; } return heroNode; }
public HeroNode preOrederSearch ( int no) { if ( root != null) { return root. preOrderSearch ( no) ; } else { return null; } } public HeroNode infixOrderSeach ( int no) { if ( root != null) { return root. infixOrderSearch ( no) ; } else { return null; } } public HeroNode postOrderSeach ( int no) { if ( root != null) { return root. postOrderSearch ( no) ; } else { return null; } }
完整代码
package tree; public class BinaryTreeDemo { public static void main ( String[ ] args) { BinaryTree binaryTree = new BinaryTree ( ) ; HeroNode root = new HeroNode ( 1 , "宋江" ) ; HeroNode node2 = new HeroNode ( 2 , "吴用" ) ; HeroNode node3 = new HeroNode ( 3 , "卢俊义" ) ; HeroNode node4 = new HeroNode ( 4 , "林冲" ) ; HeroNode node5 = new HeroNode ( 5 , "关胜" ) ; binaryTree. setRoot ( root) ; root. setLeft ( node2) ; root. setRight ( node3) ; node3. setRight ( node4) ; node3. setLeft ( node5) ;
System. out. println ( "前序遍历查找:~~~~" ) ; HeroNode heroNode1 = binaryTree. preOrederSearch ( 5 ) ; if ( heroNode1 != null) { System. out. println ( "找到节点:" + heroNode1. toString ( ) ) ; } else { System. out. println ( "没有找到" ) ; } System. out. println ( "中序遍历查找:~~~~" ) ; HeroNode heroNode2 = binaryTree. infixOrderSeach ( 5 ) ; if ( heroNode2 != null) { System. out. println ( "找到节点:" + heroNode2. toString ( ) ) ; } else { System. out. println ( "没有找到" ) ; } System. out. println ( "后序遍历查找:~~~~" ) ; HeroNode heroNode3 = binaryTree. postOrderSeach ( 5 ) ; if ( heroNode3 != null) { System. out. println ( "找到节点:" + heroNode3. toString ( ) ) ; } else { System. out. println ( "没有找到" ) ; } }
} class BinaryTree { private HeroNode root; public void setRoot ( HeroNode root) { this . root = root; } public void preOrder ( ) { if ( this . root != null) { this . root. preOrder ( ) ; } else { System. out. println ( "二叉树为空无法遍历" ) ; } } public void infixOrder ( ) { if ( this . root != null) { this . root. infixOrder ( ) ; } else { System. out. println ( "二叉树为空无法遍历" ) ; } } public void postOrder ( ) { if ( this . root != null) { this . root. postOrder ( ) ; } else { System. out. println ( "二叉树为空无法遍历" ) ; } } public HeroNode preOrederSearch ( int no) { if ( root != null) { return root. preOrderSearch ( no) ; } else { return null; } } public HeroNode infixOrderSeach ( int no) { if ( root != null) { return root. infixOrderSearch ( no) ; } else { return null; } } public HeroNode postOrderSeach ( int no) { if ( root != null) { return root. postOrderSearch ( no) ; } else { return null; } } }
class HeroNode { private int no; private String name; private HeroNode left; private HeroNode right; public HeroNode ( int no, String name) { this . no = no; this . name = name; } public int getNo ( ) { return no; } public void setNo ( int no) { this . no = no; } public String getName ( ) { return name; } public void setName ( String name) { this . name = name; } public HeroNode getLeft ( ) { return left; } public void setLeft ( HeroNode left) { this . left = left; } public HeroNode getRight ( ) { return right; } public void setRight ( HeroNode right) { this . right = right; } @Override public String toString ( ) { return "HeroNode{" + "no=" + no + ", name='" + name + '\'' + '}' ; } public void preOrder ( ) { System. out. println ( this ) ; if ( this . left != null) { this . left. preOrder ( ) ; } if ( this . right != null) { this . right. preOrder ( ) ; } } public void infixOrder ( ) { if ( this . left != null) { this . left. infixOrder ( ) ; } System. out. println ( this ) ; if ( this . right != null) { this . right. infixOrder ( ) ; } } public void postOrder ( ) { if ( this . left != null) { this . left. postOrder ( ) ; } if ( this . right != null) { this . right. postOrder ( ) ; } System. out. println ( this ) ; } public static int i = 1 , j = 1 , k = 1 ; public HeroNode preOrderSearch ( int no) { System. out. println ( "前序遍历" + ( i++ ) + "次" ) ; if ( this . no == no) { return this ; } HeroNode heroNode = null; if ( this . left != null) { heroNode = this . left. preOrderSearch ( no) ; } if ( heroNode != null) { return heroNode; } if ( this . right != null) { heroNode = this . right. preOrderSearch ( no) ; } return heroNode; } public HeroNode infixOrderSearch ( int no) { HeroNode heroNode = null; if ( this . left != null) { heroNode = this . left. infixOrderSearch ( no) ; } if ( heroNode != null) { return heroNode; } System. out. println ( "中序遍历" + ( j++ ) + "次" ) ; if ( this . no == no) { return this ; } if ( this . right != null) { heroNode = this . right. infixOrderSearch ( no) ; } return heroNode; } public HeroNode postOrderSearch ( int no) { HeroNode heroNode = null; if ( this . left != null) { heroNode = this . left. postOrderSearch ( no) ; } if ( heroNode != null) { return heroNode; } if ( this . right != null) { heroNode = this . right. postOrderSearch ( no) ; } if ( heroNode != null) { return heroNode; } System. out. println ( "后序遍历" + ( k++ ) + "次" ) ; if ( this . no == no) { return this ; } return heroNode; }
}
后序遍历查找最快