IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> LeetCode每日一题(All Possible Full Binary Trees) -> 正文阅读

[数据结构与算法]LeetCode每日一题(All Possible Full Binary Trees)

Given an integer n, return a list of all possible full binary trees with n nodes. Each node of each tree in the answer must have Node.val == 0.

Each element of the answer is the root node of one possible tree. You may return the final list of trees in any order.

A full binary tree is a binary tree where each node has exactly 0 or 2 children.

Example 1:

Input: n = 7
Output: [[0,0,0,null,null,0,0,null,null,0,0],[0,0,0,null,null,0,0,0,0],[0,0,0,0,0,0,0],[0,0,0,0,0,null,null,null,null,0,0],[0,0,0,0,0,null,null,0,0]]

Example 2:

Input: n = 3
Output: [[0,0,0]]

Constraints:

  • 1 <= n <= 20

这题着实费了点功夫去想, 一开始还是想着用递归加遍历的方式来做, 但是因为是要生成完全二叉树, 所以比较复杂。后来看着图,突然想到,其实完全二叉树就是一个根节点和左右两个完全二叉树的组合, 这样我们从只包含一个节点的二叉树开始推, 推到 n 个节点的二叉树的所有排列就可以了。这里要注意一点的是,只有 n 为奇数的时候才能生成完全二叉树。


use std::cell::RefCell;
use std::collections::HashMap;
use std::rc::Rc;
impl Solution {
    fn clone(root: &Option<Rc<RefCell<TreeNode>>>) -> Option<Rc<RefCell<TreeNode>>> {
        if let Some(node) = root {
            let mut copy = TreeNode::new(node.borrow().val);
            copy.left = Solution::clone(&node.borrow().left);
            copy.right = Solution::clone(&node.borrow().right);
            return Some(Rc::new(RefCell::new(copy)));
        }
        None
    }
    pub fn all_possible_fbt(n: i32) -> Vec<Option<Rc<RefCell<TreeNode>>>> {
        if n % 2 == 0 {
            return vec![];
        }
        let mut m: HashMap<i32, Vec<Option<Rc<RefCell<TreeNode>>>>> =
            vec![(1, vec![Some(Rc::new(RefCell::new(TreeNode::new(0))))])]
                .into_iter()
                .collect();
        for i in (3..21).step_by(2) {
            if i > n {
                break;
            }

            let mut nodes = Vec::new();
            for l in (1..i).step_by(2) {
                let lefts = m.get(&l).unwrap().clone();
                let rights = m.get(&(i - 1 - l)).unwrap().clone();
                for left in &lefts {
                    for right in &rights {
                        nodes.push(Some(Rc::new(RefCell::new(TreeNode {
                            val: 0,
                            left: Solution::clone(left),
                            right: Solution::clone(right),
                        }))));
                    }
                }
            }
            m.insert(i, nodes);
        }
        m.get(&n).unwrap().clone()
    }
}
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 12:36:03  更:2022-04-04 12:37:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 9:41:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码