114. Flatten Binary Tree to Linked List
"Связный список" должен использовать тот же класс TreeNode, где указатель на правого ребенка указывает на следующий узел в списке, а указатель на левого ребенка всегда равен null.
"Связный список" должен быть в том же порядке, что и обход бинарного дерева в прямом порядке.
Пример:
Input: root = [1,2,5,3,4,null,6]
Output: [1,null,2,null,3,null,4,null,5,null,6]
C# решение
сопоставлено/оригиналpublic class Solution {
private TreeNode FlattenTree(TreeNode node) {
if (node == null) {
return null;
}
if (node.left == null && node.right == null) {
return node;
}
TreeNode leftTail = FlattenTree(node.left);
TreeNode rightTail = FlattenTree(node.right);
if (leftTail != null) {
leftTail.right = node.right;
node.right = node.left;
node.left = null;
}
return rightTail == null ? leftTail : rightTail;
}
public void Flatten(TreeNode root) {
FlattenTree(root);
}
}
C++ решение
auto-draft, проверить перед отправкой#include <bits/stdc++.h>
using namespace std;
// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
private TreeNode FlattenTree(TreeNode node) {
if (node == null) {
return null;
}
if (node.left == null && node.right == null) {
return node;
}
TreeNode leftTail = FlattenTree(node.left);
TreeNode rightTail = FlattenTree(node.right);
if (leftTail != null) {
leftTail.right = node.right;
node.right = node.left;
node.left = null;
}
return rightTail == null ? leftTail : rightTail;
}
public void Flatten(TreeNode root) {
FlattenTree(root);
}
}
Java решение
сопоставлено/оригиналclass Solution {
private TreeNode flattenTree(TreeNode node) {
if (node == null) {
return null;
}
if (node.left == null && node.right == null) {
return node;
}
TreeNode leftTail = this.flattenTree(node.left);
TreeNode rightTail = this.flattenTree(node.right);
if (leftTail != null) {
leftTail.right = node.right;
node.right = node.left;
node.left = null;
}
return rightTail == null ? leftTail : rightTail;
}
public void flatten(TreeNode root) {
this.flattenTree(root);
}
}
JavaScript решение
сопоставлено/оригиналvar flattenTree = function (node) {
if (node == null) {
return null;
}
if (node.left == null && node.right == null) {
return node;
}
let leftTail = flattenTree(node.left);
let rightTail = flattenTree(node.right);
if (leftTail != null) {
leftTail.right = node.right;
node.right = node.left;
node.left = null;
}
return rightTail == null ? leftTail : rightTail;
};
var flatten = function (root) {
flattenTree(root);
};
Python решение
сопоставлено/оригиналclass TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
class Solution:
def flattenTree(self, node: TreeNode) -> TreeNode:
if not node:
return None
if not node.left and not node.right:
return node
leftTail = self.flattenTree(node.left)
rightTail = self.flattenTree(node.right)
if leftTail:
leftTail.right = node.right
node.right = node.left
node.left = None
return rightTail if rightTail else leftTail
def flatten(self, root: TreeNode) -> None:
self.flattenTree(root)
Go решение
сопоставлено/оригиналtype TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
func flattenTree(node *TreeNode) *TreeNode {
if node == nil {
return nil
}
if node.Left == nil && node.Right == nil {
return node
}
leftTail := flattenTree(node.Left)
rightTail := flattenTree(node.Right)
if leftTail != nil {
leftTail.Right = node.Right
node.Right = node.Left
node.Left = nil
}
if rightTail != nil {
return rightTail
} else {
return leftTail
}
}
func flatten(root *TreeNode) {
flattenTree(root)
}
Algorithm
1️⃣
Плоское преобразование дерева: Рекурсивно преобразуем левое и правое поддеревья заданного узла, сохраняя соответствующие конечные узлы в leftTail и rightTail.
2️⃣
Установка соединений: Если у текущего узла есть левый ребенок, выполняем следующие соединения:
leftTail.right = node.right
node.right = node.left
node.left = None
3️⃣
Возврат конечного узла: Возвращаем rightTail, если у узла есть правый ребенок, иначе возвращаем leftTail.
😎
Вакансии для этой задачи
Показаны активные вакансии с пересечением по тегам задачи.