输出单层节点

来源:互联网 发布:诱导支付自动赚钱源码 编辑:程序博客网 时间:2024/05/01 06:16

题目

对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。
给定二叉树的根结点指针TreeNode* root,以及链表上结点的深度,请返回一个链表ListNode,代表该深度上所有结点的值,请按树上从左往右的顺序链接,保证深度不超过树的高度,树上结点的值为非负整数且不超过100000。

实现

public class TreeLevel {    public Node getTreeLevel(BinaryTreeNode root, int dep) {        if(root==null || dep<1){            return null;        }        Queue<BinaryTreeNode> queue = new ArrayDeque<BinaryTreeNode>();        queue.add(root);        while (!queue.isEmpty() && dep>1){            int len = queue.size();            for(int i=0;i<len;i++){                BinaryTreeNode temp = queue.poll();                if(temp.left!=null){                    queue.add(temp.left);                }                if(temp.right!=null){                    queue.add(temp.right);                }            }            dep--;        }        Node head = new Node(queue.poll().value);        Node temp = head;        while (!queue.isEmpty()){            temp.next = new Node(queue.poll().value);            temp=temp.next;        }        return head;    }public Node getTreeLevel2(BinaryTreeNode root, int dep) {        if(root==null || dep<1){            return null;        }        Queue<BinaryTreeNode> queue = new ArrayDeque<BinaryTreeNode>();        queue.add(root);        int current_dep =1;        int current_num =1;        int next_num =0;        BinaryTreeNode current_node = null;        while (!queue.isEmpty()){            if(current_dep==dep){                break;            }            current_node = queue.poll();            current_num--;            if(current_node.left!=null){                queue.add(current_node.left);                next_num++;            }            if(current_node.right!=null){                queue.add(current_node.right);                next_num++;            }            if(current_num==0){                current_num = next_num;                next_num=0;                current_dep++;            }        }        Node head = new Node(queue.poll().value);        Node temp = head;        while (!queue.isEmpty()){            temp.next = new Node(queue.poll().value);            temp=temp.next;        }        return head;    }}class Node {    int value;    Node next;    public Node(int value){        this.value=value;    }    public Node(){    }}class BinaryTreeNode {    int value;    BinaryTreeNode left;    BinaryTreeNode right;    public BinaryTreeNode() {    }    public BinaryTreeNode(int val) {        this.value = val;    }}
原创粉丝点击