LeetCode:二叉树相关应用

LeetCode:二叉树相关应用

基础知识

617.归并两个二叉树

题目

Given two binary trees and imagine that when you put one of them to cover the other, some nodes of the two trees are overlapped while the others are not.

You need to merge them into a new binary tree. The merge rule is that if two nodes overlap, then sum node values up as the new value of the merged node. Otherwise, the NOT null node will be used as the node of new tree.

Example 1:

Input:
	Tree 1                     Tree 2
          1                         2
         / \                       / \
        3   2                     1   3
       /                           \   \
      5                             4   7
Output:
Merged tree:
	     3
	    / 	   4   5
	  / \   \
	 5   4   7

Note: The merging process must start from the root nodes of both trees.

分析

以t1树为基础展开归并,首先两树都进行先序遍历,在遍历的过程中,如果发现一方当前节点不存在,则用另一者的节点桥接过来,如果两者都存在,则计算其和。

这里有两个小思考点:

  如果t1节点有,而t2节点没有,那么无须进行其他操作,并且t1节点的当前子节点都无需遍历,因为t2全都不存在。同理,t1没有,t2桥接过来,所有的子节点都无需再遍历。  

本题主要考察了二叉树的线性存储的先序遍历、递归思想。

标准题解

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
        if(t1==null)
            return t2;
        if(t2==null)
            return t1;
        t1.val +=t2.val;
        t1.left = mergeTrees(t1.left,t2.left);
        t1.right = mergeTrees(t1.right,t2.right);
        return t1;
    }
}

  

原文地址:https://www.cnblogs.com/MrSaver/p/8432584.html

时间: 2024-08-27 14:19:20

LeetCode:二叉树相关应用的相关文章

Leetcode:二叉树的前序遍历

Leetcode: 二叉树的前序遍历 最近在复习数据结构, 感觉很多东西都忘得的差不多了,哪怕是看完书再看视频,还是容易忘,所以干脆想着配合leetcode来刷吧,Python实现起来很简单,但是C语言也不能丢,所以C语言和Python一起吧. 题目: 给定一个二叉树,返回它的前序遍历. 输入: [1,null,2,3] 1 2 / 3 输出: [1,2,3] Python 实现 # Definition for a binary tree node. # class TreeNode(obje

acwing 70-72 剑指OFFER 二叉树相关

地址 https://www.acwing.com/problem/content/66/ https://www.acwing.com/problem/content/67/ https://www.acwing.com/problem/content/submission/68/ 三道题都是二叉树相关 使用递归遍历即可解决 70. 二叉搜索树的第k个结点 给定一棵二叉搜索树,请找出其中的第k小的结点. 你可以假设树和k都存在,并且1≤k≤树的总结点数. 输入 输入:root = [2, 1,

leetcode | 二叉树的前序遍历、中序遍历、后续遍历的非递归实现

Binary Tree Preorder Traversal:https://leetcode.com/problems/binary-tree-preorder-traversal/ Binary Tree Inorder Traversal :https://leetcode.com/problems/binary-tree-inorder-traversal/ Binary Tree Postorder Traversal:https://leetcode.com/problems/bin

二叉树相关

/* _递归的精髓在二叉树的各种问题上体现的淋漓尽致!!! */ #include<stdio.h> #include<iostream> #include <stack> #include<vector> #include <assert.h> using namespace std; typedef struct node //二叉树结点的结构体表示形式 { int data; node *left,*right; }BTree; //---

二叉树相关题目总结

1. 简要介绍   关于二叉树问题,由于其本身固有的递归属性,通常我们可以用递归算法来解决.(<编程之美>,P253) 总结的题目主要以leetcode题目为主. 2. 测试用例 空树,只有节点的二叉树,只有左子树/右子树的二叉树,既有左子树右有右子树的二叉树. 3. 二叉树的遍历 遍历简介: 二叉树的遍历 分层遍历:二叉树分层遍历 前序遍历:[LeetCode] Binary Tree Preorder Traversal 中序遍历:[LeetCode] Binary Tree Inorde

C++实现二叉树相关操作

测试环境:windows 7 vs2010 主要实现二叉树的初始化递归和非递归遍历,层次遍历,获取叶子节点的个数,获取树的高度以及镜像树,部分代码也参考了互联网上的相关资料. 源程序: BinaryTreeNode.h #ifndef _BINARY_NODE #define _BINARY_NODE #include<iostream> using namespace std; template<class ItemType> struct BinaryTreeNode { It

二叉树相关知识总结(三)

前两篇日志主要研究了二叉树的相关基本知识,以及二叉树的最基本的实现 今天我们主要研究下,二叉查找树的相关主要特点,以及Java实现. 一.概念 二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值: (2)若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值: 换句话说:中根遍历是有序的. (3)左.右子树也分别为二叉排序树: 思考:重复的值怎么处理?是否存在值一样的节点? 初始化一颗二叉排序树根节点的选取问题 p

二叉树相关基础知识总结

一:树的概念 树是一种数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的集合.把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的.它具有以下的特点: 1:每个结点有零个或多个子结点: 2:没有父结点的结点称为根结点: 3:每一个非根结点有且只有一个父结点: 4:除了根结点外,每个子结点可以分为多个不相交的子树 二:树相关术语 节点的度:一个节点含有的子树的个数称为该节点的度: 叶节点或终端节点:度为0的节点称为叶节点: 非终端节点或分支节点:度不为0的节点:

leetcode sum相关算法题

1. Two Sum(https://oj.leetcode.com/problems/two-sum/) 解题思路: 解法一: 暴力,O(n2)时间复杂度,TLE 解法二:利用hash, 记录下数组中每个值对应的下标,再遍历一遍数组,通过查看target-num[i]的值是否在map中来确定另一个数值.时间复杂度O(n) 解法三:对num数组排序,O(nlog(n)), 然后左右夹逼O(n). 但这道题要求记录下标,故这个方法行不通. python代码如下: 1 def twoSum(self