Binary Tree Inorder Traversal @ LeetCode

看了好久的维基百科关于二叉树的解说、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)+" ");
}
}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值