4.4---建立二叉树的链表

public class TreeLevel {
     public ListNode getTreeLevel(TreeNode root, int dep) {
        // write code here
        List<TreeNode> result = new ArrayList();
        ListNode res = null;
        if(root == null || dep <= 0    ){
            return res;
        }
        result.add(root);
        if(dep == 1){
            res = new ListNode(root.val);
            return res;
        }

        while(dep > 1){
            List<TreeNode> temp = new ArrayList();
            for(TreeNode t : result){
                if(t.left != null) temp.add(t.left);
                if(t.right != null) temp.add(t.right);
            }
            result = temp;
            dep--;
        }

        res = new ListNode(result.get(0).val);
        ListNode temp = res;
        for(int i = 1; i < result.size(); i++){
            temp.next = new ListNode(result.get(i).val);
            temp = temp.next;
        }
        return res;
    }
}
时间: 2024-10-12 23:43:42

4.4---建立二叉树的链表的相关文章

非递归建立二叉树

前言 使用递归(Recursion)建立二叉树(Binary Tree)的非顺序存储结构(即二叉链表),可以简化算法编写的复杂程度,但是递归效率低,而且容易导致堆栈溢出,因而很有必要使用非递归算法. 引入 无论是单链表还是二叉树,创建时要解决问题就是关系的建立,即单链表中前驱节点与当前节点的关系和二叉树中父节点与子节点的关系. 首先,思考一下建立单链表的过程,为了使链表各个节点连接起来,在创建当前节点(q)的时候,需借助一个指针(p)指向前一个节点,然后p->next = q. 由此推广至二叉树

数据结构二叉树——建立二叉树、中序递归遍历、非递归遍历、层次遍历

数据结构二叉树-- 编写函数实现:建立二叉树.中序递归遍历.借助栈实现中序非递归遍历.借助队列实现层次遍历.求高度.结点数.叶子数及交换左右子树. ("."表示空子树) #include<stdio.h> #include<stdlib.h> //***********二叉树链表节点结构 typedef char DataType; typedef struct Node {  DataType data;  struct Node*LChild;  struc

二叉树的链表实现

直接上代码: /* 二叉树的链表实现: 以及三种遍历方式: author:天下无双 Date:2014-5-28 Version:2.0 */ #include <iostream> #include <string> typedef int T;//树内节点的数据类型 using namespace std; class BiTree { private: struct BiNode{ T data; BiNode *lchild,*rchild; BiNode(T d){ da

递归建立二叉树

转载:递归建立二叉树 假设二叉树为: a b                 c d                 e 因为程序中要知道叶子结点(终点),所以要将上面的二叉树变成扩展二叉树 (把叶子结点的孩子补成#, 用作标记),  扩展后就变成了: a b                    c #        d          #       e #    #             #    # 那么,在输入的时候,需要输入: ab#d##C#e##      (注意,输入后,按

建立二叉树以及三中递归遍历

#include <stdio.h>#include<stdlib.h>#define ElemType char//节点声明,数据域.左孩子指针.右孩子指针typedef struct BiTNode{ char data; struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;//先序建立二叉树BiTree CreateBiTree(){ char ch; BiTree T; scanf("%c",&ch);

LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal (用先序和中序树遍历来建立二叉树)

Given preorder and inorder traversal of a tree, construct the binary tree. Note:You may assume that duplicates do not exist in the tree. 题目标签:Array, Tree 题目给了我们preOrder 和 inOrder 两个遍历array,让我们建立二叉树.先来举一个例子,让我们看一下preOrder 和 inOrder的特性. 1 / \ 2        

[LeetCode] Construct Binary Tree from Preorder and Inorder Traversal 由先序和中序遍历建立二叉树

Given preorder and inorder traversal of a tree, construct the binary tree. Note:You may assume that duplicates do not exist in the tree. 这道题要求用先序和中序遍历来建立二叉树,跟之前那道Construct Binary Tree from Inorder and Postorder Traversal 由中序和后序遍历建立二叉树原理基本相同,针对这道题,由于先

从二叉树改链表引发的递归二三想

递归其实就是寻找通项公式,但是通项公式可以有轻微的区别. 比如二叉树改链表(只调整箭头方向)这件事情,用以下两种方法都可以实现. 方法1: 从根开始 (1)调整左子树 (2)调整右子树  (3)(如何调整)左子树的最大值连接 自身,右子树的最小值连接自身 方法2:从根开始  (1)返回左子树最大值连接自身 (2)返回右子树最小值连接自身 (3)(如何返回值)如果是来自左子树,返回最大值,如果是来自右子树,返回最小值 (4)  递归调整左右子树 进而可以简化为 : (1)调整左子树,并返回最大值连

由先序和中序遍历序列建立二叉树的递归算法

1 void PreInOrd(char preord[], char inord[], int j, int j, int k, int h, BiTree *t) 2 { 3 //先序序列:i->j,中序序列k->h,建立二叉树t 4 int m; 5 (*t) = new BiNode; 6 (*t)->data = preord[i]; 7 m = k; 8 while (inord[m] != preord[i]) 9 { 10 m++; 11 } 12 if (m == k)

采用先序遍历 和层次遍历递归建立二叉树--进行封装

1 package com.offer; 2 3 public class TreeNode { 4 5 int val = 0; 6 TreeNode left = null; 7 TreeNode right = null; 8 9 public TreeNode(int val) 10 { 11 this.val=val; 12 } 13 14 public TreeNode() 15 { 16 CreateBinaryTree();// 采用默认的 17 //preShow(this.r