Binary Tree Preorder Traversal @leetcode

在二叉树方面停留了好长一段时间,各种资料:维基百科的定义、csdn的博客,java的api使用方法视频,最近突然发现我对数据结构的理解似乎开始有点质变的现象啦,开始能自己写出完整正确的代码啦,欣喜中,再接再厉,为自己加油!今天来贴一段二叉树递归实现先序遍历的完整代码。
      leetcode原题地址:https://oj.leetcode.com/problems/binary-tree-preorder-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 Preorder_traversal {
	private TreeNode root = null;
	private ArrayList<Integer> res;
	
	public Preorder_traversal(){
		root = new TreeNode(1,1);
	} 
	
	//创建二叉树
	public void createBinaryTree(TreeNode root){
		TreeNode newNodeB = new TreeNode(2,2);
		TreeNode newNodeC = new TreeNode(3,3);
		root.rightChild = newNodeB;
		root.rightChild.leftChild = newNodeC;
		
	}
	
	//二叉树由结点构成,所以需要创建TreeNode类
	public class TreeNode{
		private int key = 0;
		private int data = 0;
		private TreeNode leftChild = null;
		private TreeNode rightChild = null;
		
		public TreeNode(int key,int data){
			this.key =  key;
			this.data = data;
			this.leftChild = null;
			this.rightChild = null;
		}
	}
	
	//二叉树结点通常用数组或线性表进行存储,这里选择使用数组ArrayList才存储
	public ArrayList<Integer> preorder_Traversal(TreeNode root){
		res = new ArrayList<Integer>();
		helper(root,res);
		return res;
	}
	
	public void helper(TreeNode root,ArrayList<Integer> res){
		if (root == null)
			return ;
		else {
			//helper(root,res);
			res.add(root.data);
			helper(root.leftChild,res);
			helper(root.rightChild,res);
		}
	}
	
	public static void main(String[] args){
		Preorder_traversal bt = new Preorder_traversal();
		bt.createBinaryTree(bt.root);
		bt.preorder_Traversal(bt.root);
		int count = bt.res.size();
		for (int i=0;i<count;i++){
			System.out.print(bt.res.get(i)+" ");
		}
	}
}

打印结果如下:

1 2 3 





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值