首页 > 其他分享 >BM25 二叉树的后序遍历

BM25 二叉树的后序遍历

时间:2023-01-30 22:00:22浏览次数:42  
标签:遍历 TreeNode BM25 nullptr int 二叉树 rc stack result

https://www.nowcoder.com/practice/1291064f4d5d4bdeaefbf0dd47d78541?tpId=295&tqId=2291301&ru=/exam/oj&qru=/ta/format-top101/question-ranking&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D295

后序遍历的关键在于,记录最后一次访问的节点,避免重复访问

后序遍历访问顺序:左节点-> 右节点-> 当前节点

Go

package main
import . "nc_tools" /* * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @return int整型一维数组 */ func postorderTraversal( root *TreeNode ) []int { // write code here rc := root stack := make([]*TreeNode,0,100) result := make([]int,0,100) var prev *TreeNode for rc != nil || len(stack) > 0{ if rc == nil{ rc = stack[len(stack)-1] if rc.Right != nil && rc.Right != prev{ rc = rc.Right   }else{ result = append(result,rc.Val) prev = rc stack = stack[:len(stack)-1] rc = nil } } for rc != nil{ stack = append(stack,rc) rc = rc.Left } } return result }

C++

/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */ class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @return int整型vector */ vector<int> postorderTraversal(TreeNode* root) { // write code here TreeNode* rc = root; stack<TreeNode*> st; vector<int> result; TreeNode* prev = nullptr; while(rc != nullptr || st.size() > 0){ if(rc == nullptr){ rc = st.top(); if(rc->right != nullptr && rc->right != prev){ rc = rc->right; }else{ result.push_back(rc->val); prev = rc; st.pop(); rc = nullptr; } } while(rc != nullptr){ st.push(rc); rc = rc->left; }
} return result; } };

标签:遍历,TreeNode,BM25,nullptr,int,二叉树,rc,stack,result
From: https://www.cnblogs.com/starter-songudi/p/17077357.html

相关文章

  • BM24 二叉树的中序遍历
    https://www.nowcoder.com/practice/0bf071c135e64ee2a027783b80bf781d?tpId=295&tqId=1512964&ru=/exam/oj&qru=/ta/format-top101/question-ranking&sourceUrl=%2Fexam%......
  • 114. 二叉树展开为链表
    问题描述https://leetcode.cn/problems/flatten-binary-tree-to-linked-list/description/解题思路这个题目,用一个数组就能很好的解决。但空间复杂度是O(n).题目中给的......
  • 二叉树
    线索二叉树1、问题的提出2、线索二叉树的概念n个节点的二叉链表中包含有n+1个空指针域【2n-(n-1)=n+1】{如上图,n为6,空指针域为7},利用二叉链表中的空指针域,存放指......
  • [数据结构]二叉树的前中后序遍历(递归+迭代实现)
    二叉树的遍历主要的三种遍历方式二叉树主要的遍历方式有前序遍历、中序遍历和后序遍历。(1)前序遍历:根节点-->左子树-->右子树(2)中序遍历:左子树-->根节点-->右子树(3)后序......
  • 力扣257 二叉树的所有路劲
    题目:给你一个二叉树的根节点root,按任意顺序,返回所有从根节点到叶子节点的路径。叶子节点是指没有子节点的节点。示例:输入:root=[1,2,3,null,5]输出:["1->2->......
  • 双向链表 添加与遍历
    packagecom.pay.test;//定义节点publicclassDoubleLinkedList{//初始化头节点privateHeroNodehead=newHeroNode(0,"","");//返回节点头p......
  • 二叉树遍历 前序 中序 后序
    packagecom.pay.test;importjava.util.LinkedList;publicclassNode{privateIntegerdata;privateNodeleft;privateNoderight;publ......
  • 力扣110 平衡二叉树
    题目:给定一个二叉树,判断它是否是高度平衡的二叉树。本题中,一棵高度平衡二叉树定义为:一个二叉树每个节点的左右两个子树的高度差的绝对值不超过1。示例:输入:root......
  • 力扣222 完全二叉树
    题目:给你一棵完全二叉树的根节点root,求出该树的节点个数。完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大值,并且最下面......
  • 遍历树节点
    exportconstforeachTree=(data,callback,childrenName='children')=>{for(leti=0;i<data.length;i++){callback(data[i])if(data[i][ch......