当前位置:网站首页>【算法leetcode】面试题 04.03. 特定深度节点链表(多语言实现)
【算法leetcode】面试题 04.03. 特定深度节点链表(多语言实现)
2022-07-04 12:52:00 【二当家的白帽子】
文章目录
面试题 04.03. 特定深度节点链表:
给定一棵二叉树,设计一个算法,创建含有某一深度上所有节点的链表(比如,若一棵树的深度为 D,则会创建出 D 个链表)。返回一个包含所有深度的链表的数组。
样例 1:
输入:
[1,2,3,4,5,null,7,8]
1
/ \
2 3
/ \ \
4 5 7
/
8
输出:
[[1],[2,3],[4,5,7],[8]]
分析
- 面对这道算法题目,二当家的陷入了沉思。
- 如果对二叉树和链表比较熟悉,就会明白其实就是二叉树的层序遍历,每一层组合成一条链表。
题解
rust
// Definition for a binary tree node.
// #[derive(Debug, PartialEq, Eq)]
// pub struct TreeNode {
// pub val: i32,
// pub left: Option<Rc<RefCell<TreeNode>>>,
// pub right: Option<Rc<RefCell<TreeNode>>>,
// }
//
// impl TreeNode {
// #[inline]
// pub fn new(val: i32) -> Self {
// TreeNode {
// val,
// left: None,
// right: None
// }
// }
// }
// Definition for singly-linked list.
// #[derive(PartialEq, Eq, Clone, Debug)]
// pub struct ListNode {
// pub val: i32,
// pub next: Option<Box<ListNode>>
// }
//
// impl ListNode {
// #[inline]
// fn new(val: i32) -> Self {
// ListNode {
// next: None,
// val
// }
// }
// }
use std::rc::Rc;
use std::cell::RefCell;
impl Solution {
pub fn list_of_depth(tree: Option<Rc<RefCell<TreeNode>>>) -> Vec<Option<Box<ListNode>>> {
let mut ans: Vec<Option<Box<ListNode>>> = Vec::new();
let mut queue = std::collections::VecDeque::new();
queue.push_back(tree);
while !queue.is_empty() {
let mut head = Some(Box::new(ListNode::new(0)));
let mut tail = head.as_mut();
let size = queue.len();
for _ in 0..size {
let node = queue.pop_front().unwrap().unwrap();
let mut node = node.borrow_mut();
if node.left.is_some() {
queue.push_back(node.left.take());
}
if node.right.is_some() {
queue.push_back(node.right.take());
}
tail.as_mut().unwrap().next = Some(Box::new(ListNode::new(node.val)));
tail = tail.unwrap().next.as_mut();
}
ans.push(head.as_mut().unwrap().next.take());
}
ans
}
}
go
/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */
/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */
func listOfDepth(tree *TreeNode) []*ListNode {
var ans []*ListNode
queue := []*TreeNode{
tree}
for len(queue) > 0 {
head := &ListNode{
}
tail := head
size := len(queue)
for i := 0; i < size; i++ {
node := queue[i]
if node.Left != nil {
queue = append(queue, node.Left)
}
if node.Right != nil {
queue = append(queue, node.Right)
}
tail.Next = &ListNode{
Val: node.Val}
tail = tail.Next
}
ans = append(ans, head.Next)
queue = queue[size:]
}
return ans
}
typescript
/** * Definition for a binary tree node. * class TreeNode { * val: number * left: TreeNode | null * right: TreeNode | null * constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left) * this.right = (right===undefined ? null : right) * } * } */
/** * Definition for singly-linked list. * class ListNode { * val: number * next: ListNode | null * constructor(val?: number, next?: ListNode | null) { * this.val = (val===undefined ? 0 : val) * this.next = (next===undefined ? null : next) * } * } */
function listOfDepth(tree: TreeNode | null): Array<ListNode | null> {
const ans = [];
const queue = [tree];
while (queue.length > 0) {
const head = new ListNode();
let tail = head;
const size = queue.length;
for (let i = 0; i < size; ++i) {
const {
val, left, right } = queue.shift();
left && queue.push(left);
right && queue.push(right);
tail.next = new ListNode(val);
tail = tail.next;
}
ans.push(head.next);
}
return ans;
};
python
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def listOfDepth(self, tree: TreeNode) -> List[ListNode]:
ans = []
q = collections.deque()
q.append(tree)
while len(q) > 0:
head = ListNode()
tail = head
size = len(q)
for _ in range(size):
node = q.popleft()
node.left and q.append(node.left)
node.right and q.append(node.right)
tail.next = ListNode(node.val)
tail = tail.next
ans.append(head.next)
return ans
c
/** * Definition for a binary tree node. * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */
int getDepth(struct TreeNode* tree) {
if (!tree) {
return 0;
}
int leftDepth = getDepth(tree->left);
int rightDepth = getDepth(tree->right);
return fmax(leftDepth, rightDepth) + 1;
}
/** * Note: The returned array must be malloced, assume caller calls free(). */
struct ListNode** listOfDepth(struct TreeNode* tree, int* returnSize){
int depth = getDepth(tree);
struct ListNode **ans = malloc(depth * sizeof(struct ListNode *));
*returnSize = 0;
struct TreeNode *queue[(int) pow(2, depth) - 1];
queue[0] = tree;
int start = 0;
int end = 1;
while (start < end) {
struct ListNode head = {
};
struct ListNode *tail = &head;
int curEnd = end;
while (start < curEnd) {
struct TreeNode *node = queue[start++];
if (node->left) {
queue[end++] = node->left;
}
if (node->right) {
queue[end++] = node->right;
}
tail->next = malloc(sizeof(struct ListNode));
tail->next->val = node->val;
tail->next->next = NULL;
tail = tail->next;
}
ans[(*returnSize)++] = head.next;
}
return ans;
}
c++
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */
class Solution {
public:
vector<ListNode*> listOfDepth(TreeNode* tree) {
vector<ListNode *> ans;
queue<TreeNode *> q;
q.push(tree);
while (q.size() > 0) {
ListNode head = ListNode(0);
ListNode *tail = &head;
int size = q.size();
for (int i = 0; i < size; ++i) {
TreeNode *node = q.front();
q.pop();
if (node->left != NULL) {
q.push(node->left);
}
if (node->right != NULL) {
q.push(node->right);
}
tail->next = new ListNode(node->val);
tail = tail->next;
}
ans.emplace_back(head.next);
}
return ans;
}
};
java
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */
/** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * ListNode(int x) { val = x; } * } */
class Solution {
public ListNode[] listOfDepth(TreeNode tree) {
List<ListNode> list = new ArrayList<>();
Queue<TreeNode> queue = new LinkedList<>();
queue.add(tree);
while (!queue.isEmpty()) {
ListNode head = new ListNode();
ListNode tail = head;
int size = queue.size();
for (int i = 0; i < size; ++i) {
TreeNode node = queue.poll();
if (node.left != null) {
queue.add(node.left);
}
if (node.right != null) {
queue.add(node.right);
}
tail.next = new ListNode(node.val);
tail = tail.next;
}
list.add(head.next);
}
ListNode[] ans = new ListNode[list.size()];
list.toArray(ans);
return ans;
}
}
原题传送门:https://leetcode.cn/problems/list-of-depth-lcci/submissions/
非常感谢你阅读本文~
欢迎【点赞】【收藏】【评论】~
放弃不难,但坚持一定很酷~
希望我们大家都能每天进步一点点~
本文由 二当家的白帽子:https://le-yi.blog.csdn.net/ 博客原创~
边栏推荐
- R language uses the mutation function of dplyr package to standardize the specified data column (using mean function and SD function), and calculates the grouping mean of the standardized target varia
- R语言使用dplyr包的mutate函数对指定数据列进行标准化处理(使用mean函数和sd函数)并基于分组变量计算标准化后的目标变量的分组均值
- 92.(cesium篇)cesium楼栋分层
- 海外游戏代投需要注意的
- R language ggplot2 visualization: gganimate package creates dynamic line graph animation (GIF) and uses transition_ The reveal function displays data step by step along a given dimension in the animat
- 数据仓库面试问题准备
- Fs4059c is a 5V input boost charging 12.6v1.2a. Inputting a small current to three lithium battery charging chips will not pull it dead. The temperature is 60 ° and 1000-1100ma is recommended
- Golang uses JSON unmarshal number to interface{} number to become float64 type (turn)
- Test process arrangement (3)
- 吃透Chisel语言.11.Chisel项目构建、运行和测试(三)——Chisel测试之ScalaTest
猜你喜欢
![[matlab] summary of conv, filter, conv2, Filter2 and imfilter convolution functions](/img/7a/9b559313b407f9a12cbaed7bebd4dc.png)
[matlab] summary of conv, filter, conv2, Filter2 and imfilter convolution functions

TestSuite and testrunner in unittest

Detailed index of MySQL

安装Mysql

China Post technology rushes to the scientific innovation board: the annual revenue is 2.058 billion, and the postal group is the major shareholder

Ruiji takeout notes

瑞吉外卖笔记

Hardware Basics - diode Basics

92.(cesium篇)cesium楼栋分层

docker-compose公网部署redis哨兵模式
随机推荐
Leetcode 61: 旋转链表
The mouse wheel of xshell/bash/zsh and other terminals is garbled (turn)
架构方面的进步
Matters needing attention in overseas game Investment Agency
Unity shader learning (3) try to draw a circle
Understand chisel language thoroughly 05. Chisel Foundation (II) -- combinational circuits and operators
Gorm read / write separation (rotation)
统计php程序运行时间及设置PHP最长运行时间
MySQL之详解索引
吃透Chisel语言.08.Chisel基础(五)——Wire、Reg和IO,以及如何理解Chisel生成硬件
Test process arrangement (3)
Golang uses JSON unmarshal number to interface{} number to become float64 type (turn)
富文本编辑:wangEditor使用教程
vscode 常用插件汇总
The font of markdown grammar is marked in red
【Matlab】conv、filter、conv2、filter2和imfilter卷积函数总结
使用CLion编译OGLPG-9th-Edition源码
CVPR 2022 | greatly reduce the manual annotation required for zero sample learning, and propose category semantic embedding rich in visual information (source code download)
Understand chisel language thoroughly 11. Chisel project construction, operation and test (III) -- scalatest of chisel test
How to operate and invest games on behalf of others at sea