java中顺序遍历的二叉树
时间:2020-02-23 14:41:15 来源:igfitidea点击:
在本教程中,我们将在Java中看到InOrder二进制树遍历。
顺序遍历:
在Inorder遍历中,每个节点在子树之间处理。
在更简单的单词中,访问左子树,节点,然后右子树。
InOrder Traversal的步骤是:
- 遍地
left subtree
在InOrder。 Visit
节点。- 遍地
right subtree
在InOrder。
可以有两种方法可以实现它
- 递归
- 迭代
递归解决方案
递归解决方案非常直的转发。
相比之下,让我们更好地理解递归。
递归的代码将是:
//Recursive Solution public void inOrder(TreeNode root) { if(root != null) { inOrder(root.left); //Visit the node by Printing the node data System.out.printf("%d ",root.data); inOrder(root.right); } }
迭代解决方案
对于递归,我们使用隐式堆栈。
所以这里要将递归解决方案转换为迭代,我们将使用显式堆栈。
迭代解决方案的步骤:
- 创建一个空堆栈
s
并初始化currentNode
作为root - 推
currentNode
到s
和集合currentNode = currentNode.left
直到currentNode
一片空白 - 如果
currentNode
是null和s
那时不是空的 - 从堆栈中弹出顶部节点
s
并打印它 - 放
currentNode = currentNode.right
- 转到步骤2
- 如果堆栈为空,则当前编码也为null,然后我们完成了
//Iterative solution public void inOrderIter(TreeNode root) { if(root == null) return; Stack<TreeNode> s = new Stack<TreeNode>(); TreeNode currentNode=root; while(!s.empty() || currentNode!=null){ if(currentNode!=null) { s.push(currentNode); currentNode=currentNode.left; } else { TreeNode n=s.pop(); System.out.printf("%d ",n.data); currentNode=n.right; } } }
允许为InOrder Traversal创建Java程序:
package org.arpit.theitroad.binarytree; import java.util.Stack; public class BinaryTreeInOrder { public static class TreeNode { int data; TreeNode left; TreeNode right; TreeNode(int data) { this.data=data; } } //Recursive Solution public void inOrder(TreeNode root) { if(root != null) { inOrder(root.left); //Visit the node by Printing the node data System.out.printf("%d ",root.data); inOrder(root.right); } } //Iterative solution public void inOrderIter(TreeNode root) { if(root == null) return; Stack<TreeNode> s = new Stack<TreeNode>(); TreeNode currentNode=root; while(!s.empty() || currentNode!=null){ if(currentNode!=null) { s.push(currentNode); currentNode=currentNode.left; } else { TreeNode n=s.pop(); System.out.printf("%d ",n.data); currentNode=n.right; } } } public static void main(String[] args) { BinaryTreeInOrder bi=new BinaryTreeInOrder(); //Creating a binary tree TreeNode rootNode=createBinaryTree(); System.out.println("Using Recursive solution:"); bi.inOrder(rootNode); System.out.println(); System.out.println("-------------------------"); System.out.println("Using Iterative solution:"); bi.inOrderIter(rootNode); } public static TreeNode createBinaryTree() { TreeNode rootNode =new TreeNode(40); TreeNode node20=new TreeNode(20); TreeNode node10=new TreeNode(10); TreeNode node30=new TreeNode(30); TreeNode node60=new TreeNode(60); TreeNode node50=new TreeNode(50); TreeNode node70=new TreeNode(70); rootNode.left=node20; rootNode.right=node60; node20.left=node10; node20.right=node30; node60.left=node50; node60.right=node70; return rootNode; } }
运行上面的程序,我们将获取以下输出:
Using Recursive solution: 10 20 30 40 50 60 70 ———————— Using Iterative solution: 10 20 30 40 50 60 70