树的几种遍历方式的代码(个人学习版)

首先是树类

public class ListNode {
   int val;
   ListNode next;

   public ListNode(){}
    public ListNode(int val){
       this.val=val;
    }
    public ListNode(int val ,ListNode next){
       this.val=val;
       this.next=next;
    }

    public void setNext(ListNode next){
       this.next=next;
    }


}

中序遍历

public void inorder(TreeNode root,LinkedList<Integer> list){
        if(root==null) return;
        inorder(root.left,list);
        list.add(root.val);
        inorder(root.right, list);
    }

先序遍历

 public void preord(TreeNode root,LinkedList<Integer> list){
        if(root==null) return;
        list.add(root.val);
        inorder(root.left,list);
        inorder(root.right, list);
    }

 后序遍历

public void  postorder(TreeNode root,LinkedList<Integer> list){
        if(root==null) return;
        inorder(root.left,list);
        inorder(root.right, list);
        list.add(root.val);
    }

bfs(广度优先)

public static void bfs(TreeNode root,List list){
        Queue<TreeNode> queue=new LinkedList<TreeNode>();
        queue.offer(root);
        while(!queue.isEmpty()){
            TreeNode node=queue.poll();
            list.add(node.val);
            if(node.left!=null) queue.offer(node.left);
            if(node.right!=null) queue.offer(node.right);
        }
    }

dfs(深度优先)

 public static void dfs(TreeNode root,List list){
        if(isLeafNode(root)){
            list.add(root.val);
            return;
        }
        list.add(root.val);
        if(root.left!=null) dfs(root.left,list);
        if(root.right!=null) dfs(root.right,list);

    }
    public static boolean isLeafNode(TreeNode node){
        return node.right==null && node.left==null;
    }

测试用例

public static void main(String[] args) {
        TreeNode node1=new TreeNode(1);
        TreeNode node2=new TreeNode(2);
        TreeNode node3=new TreeNode(3);
        TreeNode node4=new TreeNode(4);
        TreeNode node5=new TreeNode(5);
        TreeNode node6=new TreeNode(6);
        TreeNode node7=new TreeNode(7);
        node1.setRandL(node2,node3);
        node2.setRandL(node4,node5);
        node3.setRandL(node6,node7);
        List list = new ArrayList<>();
        bfs(node1,list);
        System.out.println(list);
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值