首页 > 编程语言 >算法 dfs —— 将二叉树 先序遍历 转为 链表

算法 dfs —— 将二叉树 先序遍历 转为 链表

时间:2023-05-30 22:07:19浏览次数:31  
标签:node None right last self dfs 链表 二叉树 root

将二叉树拆成链表

中文English

将一棵二叉树按照前序遍历拆解成为一个 假链表。所谓的假链表是说,用二叉树的 right 指针,来表示链表中的 next 指针。

Example

样例 1:

输入:{1,2,5,3,4,#,6}
输出:{1,#,2,#,3,#,4,#,5,#,6}
解释:
     1
    / \
   2   5
  / \   \
 3   4   6
 
1
\
 2
  \
   3
    \
     4
      \
       5
        \
         6

样例 2:

输入:{1}
输出:{1}
解释:
         1
         1

Challenge

不使用额外的空间耗费。

Notice

不要忘记将左儿子标记为 null,否则你可能会得到空间溢出或是时间溢出。

"""
Definition of TreeNode:
class TreeNode:
    def __init__(self, val):
        self.val = val
        self.left, self.right = None, None
"""

class Solution:
    """
    @param root: a TreeNode, the root of the binary tree
    @return: nothing
    """
    def flatten(self, root):
        # write your code here
        if not root:
            return
        last_node = dummy = TreeNode(None)
        stack = [root]
        while stack:
            node = stack.pop()
            last_node.right = node
            if node.right:
                stack.append(node.right)
            if node.left:
                stack.append(node.left)
            node.left, node.right = None, None
            last_node = node
class Solution:
    last_node = None
    
    """
    @param root: a TreeNode, the root of the binary tree
    @return: nothing
    """
    def flatten(self, root):
        if root is None:
            return
        
        if self.last_node is not None:
            self.last_node.left = None
            self.last_node.right = root
            
        self.last_node = root
        right = root.right
        self.flatten(root.left)
        self.flatten(right)

 后者是使用递归的解法。但是要注意变量修改的细节。

 需要在遍历中记住上次遍历节点,根据上次的节点和当前节点进行比较而得到result的算法模板:

class Solution():
   last_node = None
   result = None
   
   def run(self, root):
		self.dfs(root)
		return self.result
   
   def dfs(self):
	   if last_node is None:
	       last_node = root
	   else:
	       do_sth(last_node, root)
		   
       dfs(root.left)

	   dfs(root.right)

  

  

 

标签:node,None,right,last,self,dfs,链表,二叉树,root
From: https://blog.51cto.com/u_11908275/6382258

相关文章

  • 算法 dfs 二叉树的所有路径
    480. 二叉树的所有路径给一棵二叉树,找出从根节点到叶子节点的所有路径。Example样例1:输入:{1,2,3,#,5}输出:["1->2->5","1->3"]解释:1/\23\5样例2:输入:{1,2}输出:["1->2"]解释:1/2"""DefinitionofTreeNode:classTree......
  • 算法 翻转二叉树 dfs
    翻转二叉树翻转一棵二叉树。左右子树交换。Example样例1:输入:{1,3,#}输出:{1,#,3}解释: 11 /=>\ 33样例2:输入:{1,2,3,#,#,4}输出:{1,3,2,#,4}解释: 11/\/\23=>32/\4......
  • 算法——dfs 判断是否为BST
    95. 验证二叉查找树中文English给定一个二叉树,判断它是否是合法的二叉查找树(BST)一棵BST定义为:节点的左子树中的值要严格小于该节点的值。节点的右子树中的值要严格大于该节点的值。左右子树也必须是二叉查找树。一个节点的树也是二叉查找树。Example样例1:输入:{-1}输出:true解......
  • MongoDB C++ gridfs worked example
    使用libmongoc,参考:http://mongoc.org/libmongoc/current/mongoc_gridfs_t.html#include<mongoc.h>#include<stdio.h>#include<stdlib.h>#include<fcntl.h>classMongoGridFS{public:MongoGridFS(constchar*db);~MongoGridFS();......
  • 单链表(c++实现)
    template<typenameT>classListNode{public:explicitListNode(Tvalue_,ListNode*next_=nullptr):value(value_),next(next_){}TgetValue()const{returnvalue;}ListNode<T>*getNext()const{returnnext;};voidsetNext(ListNo......
  • 单链表
    1、特点:任意存储,顺序存取2、结构体定义和预定义#include<stdio.h>#include<stdlib.h>//malloc函数#defineElemTypeint#defineStatusint#defineERROR0#defineOK1typedefstructLnode{ElemTypedata;structLnode*next;}Lnode,*Linklist;3、初始......
  • 二叉树已知前中序,求后序
    [USACO3.4]美国血统AmericanHeritage题目描述农夫约翰非常认真地对待他的奶牛们的血统。然而他不是一个真正优秀的记帐员。他把他的奶牛们的家谱作成二叉树,并且把二叉树以更线性的“树的中序遍历”和“树的前序遍历”的符号加以记录而不是用图形的方法。你的任务是在被给......
  • 移除链表元素
    代码随想录中的一道基础算法题,这里记录下设置一个虚拟头结点在进行删除操作通过设置虚拟头节点,原链表的所有节点就都可以按照统一的方式进行移除了。classSolution{public:ListNode*removeElements(ListNode*head,intval){ListNode*dummyHead=new......
  • 打印树形结构(可视化二叉树)
    平时开发时,偶尔会操作二叉树,而查看二叉树的结构,是一种比较费时的事情,我们可以把它按照本身的结构打印出来,从而方便查看。例如Nodea=newNode(110);Nodeb=newNode(105);Nodec=newNode(115);Noded=newNode(102);Node......
  • 代码随想录算法训练营第21天 | ● 530.二叉搜索树的最小绝对差 ● 501.二叉搜索树中
     第六章 二叉树part07今日内容    详细布置   530.二叉搜索树的最小绝对差  需要领悟一下二叉树遍历上双指针操作,优先掌握递归 题目链接/文章讲解:视频讲解:  501.二叉搜索树中的众数  和 530差不多双指针思路,不过 这里涉及到一个很巧妙的代码......