看了好久的维基百科关于二叉树的解说、csdn相关博文的理解,及stone老师的帮忙下,终于写出能够打印出结果的完整程序啦。本文部分代码来自http://blog.csdn.net/linhuanmars/article/details/20187257 支持原创。其它部分是自己在stone老师的帮忙下理解后完整调试出的。
先贴leetcode的原题链接地址:https://oj.leetcode.com/problems/binary-tree-inorder-traversal/
题目意思很好理解,就是要实现中序遍历。但是最后注明使用递归算法较琐碎,建议让我们使用迭代。偶是小菜鸟,这里先使用递归实现哈~
解题思路:
要实现中序遍历,所以完整程序包含如下几点
1、创建二叉树 public void createBinaryTree(TreeNode root){}
2、二叉树是由结点构成的(即TreeNode),所以创建个TreeNode 类,即 public class TreeNode{}
3、从维基百科里了解到二叉树结点通常通过数组或者线性表来存储,我这里采用数组来存储结点,即ArrayList<Integer>,所以开头要import java.util.ArrayList;
4、前3个步骤完成之后,现在可以创建中序遍历方法啦,刚刚第3步说用ArrayList来存储二叉树结点,所以这么写中序遍历方法 public ArrayList<Integer> inordertraversal(TreeNode root){}
完整程序如下:
package tree;
import java.util.ArrayList;
public class Inorder_traversal {
private TreeNode root = null;
private ArrayList<Integer> res;
private Inorder_traversal(){
root = new TreeNode(1,1);
}
//创建二叉树
private void createBinaryTree(TreeNode root){
TreeNode newNodeB = new TreeNode(2,2);
TreeNode newNodeC = new TreeNode(3,3);
root.right = newNodeB;
root.right.left = newNodeC;
}
//二叉树是由结点构成,所以定义结点结构TreeNode
private class TreeNode{
private int key = 0;
private int data = 0;
private TreeNode left = null;
private TreeNode right = null;
private TreeNode(int key,int data){
this.key = key;
this.data = data;
this.left = null;
this.right = null;
}
}
//创建中序遍历方法,用ArrayList<Integer> 存储结点,这部分代码来自http://blog.csdn.net/linhuanmars/article/details/20187257
private ArrayList<Integer> inordertraversal(TreeNode root){
res = new ArrayList<Integer>();
helper(root,res);
return res;
}
private void helper(TreeNode root,ArrayList<Integer> res){
if (root == null)
return ;
else {
helper(root.left,res);
res.add(root.data);
helper(root.right,res);
}
}
public static void main(String[] args){
Inorder_traversal bt = new Inorder_traversal();
bt.createBinaryTree(bt.root);
bt.inordertraversal(bt.root);
int count = bt.res.size();
for (int i=0; i<count; i++){
System.out.print(bt.res.get(i)+" ");
}
}
}