https://blog.csdn.net/weixin_39912556/article/details/82852749
방법을 포장; 수입 java.util.ArrayDeque; 수입 java.util.Deque; 수입 java.util.Queue; 수입 java.util.Stack의; / ** * 2019년 9월 11일에 조이스에 의해 만들어진. * / 공용 클래스 TreeMain { 개인 정적 클래스의 TreeNode { 공공 TreeNode를 왼쪽으로 공공의 TreeNode 오른쪽; 개인 문자열 발; 공공의 TreeNode (문자열 _val) { 발 = _val; } 공공 무효 에코 () { 에서 System.out.println (발); } 공공의 TreeNode setLeft (TreeNode를 왼쪽) { this.left = 왼쪽; 이를 반환; } 공공의 TreeNode setRight (TreeNode를 오른쪽) { this.right = 오른쪽; 이를 반환; } } 공공 정적 무효 메인 (문자열 [] F) { TreeNode를 D = TreeNode를 새로운 ( "D")를; TreeNode를 E = 새 TreeNode를 ( "E"); TreeNode를 F = 새 TreeNode를 ( "F"); TreeNode를 G = TreeNode를 새로운 ( "G"); TreeNode를 B = TreeNode를 새로운 ( "B") setLeft (D) .setRight (E).; TreeNode를 C = TreeNode를 새로운 ( "C") setLeft (F) .setRight (G).; A = TreeNode를 새로운 TreeNode를 ( "A") setLeft (B) .setRight (C).; DB (A); DBD (A); WB (A); * @param 루트 * / 공공 정적 무효 DB (TreeNode를 루트) { 스택 <TreeNode를> 스택 = 새로운 스택 <> (); stack.push (루트); 반면 {(stack.isEmpty ()!) 의 TreeNode TREENODE stack.pop = (); treeNode.echo (); 경우 (treeNode.right = 널!) { stack.push (treeNode.right); } 경우 (treeNode.left = NULL!) { stack.push (treeNode.left); } } } / ** *深度递归 파라미터 : 루트 * / 공공 정적 무효 DBD (TreeNode를 루트) { 경우 (루트 == NULL) 반환; root.echo (); DBD (root.left); DBD (root.right); } / ** *广度 * @param 루트 * / 공공 정적 무효 WB (TreeNode를 루트) { Deque와 <TreeNode를> = 새로운 양단의 ArrayDeque <> (); deque.add (루트); 반면 {(deque.isEmpty ()!) 의 TreeNode TREENODE deque.remove = (); treeNode.echo (); 경우 (treeNode.left = 널!) { deque.add (treeNode.left); } 경우 (treeNode.right! = NULL) { deque.add (treeNode.right); } } } }