1. 程式人生 > >樹——二叉樹中序遍歷的下一個節點

樹——二叉樹中序遍歷的下一個節點

題目描述

給定一個二叉樹和其中的一個結點,請找出中序遍歷順序的下一個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指標。

分析二叉樹的下一個節點,一共有以下情況: 1.二叉樹為空,則返回空; 2.節點右孩子存在,則設定一個指標從該節點的右孩子出發,一直沿著指向左子結點的指標找到的葉子節點即為下一個節點; 3.節點不是根節點。如果該節點是其父節點的左孩子,則返回父節點;否則繼續向上遍歷其父節點的父節點,重複之前的判斷,返回結果。程式碼如下:

 public TreeLinkNode GetNext(TreeLinkNode node)
    {
        if(node == null)
            return null;
        if(node.right!=null)
            {
            TreeLinkNode temp=node.right;
            while(temp.left!=null)
                {
                temp=temp.left;
            }
            return temp;
        }
        else
            {
            if(node.next!=null&&node == node.next.left)
                return node.next;
            else
                {
                while(node.next!=null&&node == node.next.right)
                    {
                    node=node.next;
                }
                if(node.next!=null)
                    return node.next;
            }
            return null;
        }
    }



相關推薦

給定一個節點,求一個節點

題目描述 給定一個二叉樹和其中的一個結點,請找出中序遍歷順序的下一個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指標。 using namespace std; /

JAVA實現排序(建立、、插入節點和刪除節點操作)

JAVA實現二叉排序樹 二叉排序樹的定義 二叉排序樹或者是一棵空樹,或者是具有下列性質的二叉樹: (1)若左子樹不空,則左子樹上所有結點的值均小於或等於它的根結點的值; (2)若右子樹不空,則右子樹上所有結點的值均大於或等於它的根結點的值; (3)左、

及葉子結點個數及最後一個結點

#include"stdio.h" #include"stdlib.h" typedef struct node{ char data; struct node *lchild,*rchild; }bintnode; bintnode *root; typede

排序的建立與

編譯器:Xcode 程式語言:C data1.txt文字資料為上圖,在我的電腦裡它的儲存位置是:/Users/wsw/Desktop/資料結構/data1.txt #include<

七:重建(依據先(或者後)和重建

off 相同 tree int roo 節點 先序 throw -a 對於一顆二叉樹。能夠依據先序遍歷(或者後序遍歷)和中序遍歷(樹中不含反復的數字)又一次還原出二叉樹。 解析: 1. 先序遍歷序列的第一個元素必然是根節點,能夠由此獲取二叉樹的根節點。 2. 依

已知的先序列和序列,輸出該的後序列

iostream code tor data- span main ast avi dsm 題目描寫敘述 輸入二叉樹的先序遍歷序列和中序遍歷序列,輸出該二叉樹的後序遍歷序列。 輸入 第一行輸入二叉樹的先序遍歷序列; 第二行輸入二叉樹的中序遍歷序列。 輸出 輸出該二叉樹的

binary-tree-inorder-traversal——

str () init inorder code while urn value public Given a binary tree, return the inordertraversal of its nodes‘ values. For example:Given

構造

fin traversal dtree 構造二叉樹 div integer break param val 根據前序遍歷和中序遍歷樹構造二叉樹 樣例: 給出中序遍歷:[1,2,3]和前序遍歷:[2,1,3]. 返回如下的樹: 2 / \ 1 3 我們知道前序遍歷

根據和後構造

eno build 中序遍歷樹 oot post rsa uil cnblogs 找到 根據中序遍歷和後序遍歷樹構造二叉樹 樣例: 給出樹的中序遍歷: [1,2,3] 和後序遍歷: [1,3,2] 返回如下的樹: 2 / \ 1 3 借鑒上一篇《前序遍歷和中序遍

非遞歸算法——

spa tdi str max logs nor 算法實現 中序遍歷 非遞歸   二叉樹中序遍歷的非遞歸算法同樣可以使用棧來實現,從根結點開始,將根結點的最左結點全部壓棧,當結點p不再有最左結點時,說明結點p沒有左孩子,將該結點 出棧,訪問結點p,然後對其右孩子做同樣的處理

的前

blog root tac ace bsp else 中序 ret clas 前序遞歸於循環 #include <iostream> #include <stack> using namespace std; struct TreeNode {

給出的先,給出後

logs __main__ font class pre span 思想 style 輸出 實現一個功能: 輸入:一顆二叉樹的先序和中序遍歷 輸出:後續遍歷思想: 先序遍歷中,第一個元素是樹根 在中序遍歷中找到樹根,左邊的是左子樹 右邊的是右子樹

LeetCode:的非遞歸

== bin printf [0 -1 中序 present %d res 第一次動手寫二叉樹的,有點小激動,64行的if花了點時間,上傳leetcode一次點亮~~~ 1 /* inorder traversal binary tree */ 2 #include

和後

二叉樹 com size 基本 html 後序 href col spa 轉自:https://www.cnblogs.com/polly333/p/4740355.html 基本思想>>   先序遍歷:根——>左——>右   先序遍歷:左——>

一個節點

while tro struct 包含 sub 順序 其中 itl lin 題目描述 給定一個二叉樹和其中的一個結點,請找出中序遍歷順序的下一個結點並且返回。註意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指針。 思路:分多種情況討論 1

4685:

輸入數據 spa clu IT med 提示 break tro font 輸入數據分為多組,第一行是測試數據的組數n,下面的n行分別代表一棵二叉樹。每棵二叉樹的結點均為正整數,數據為0代表當前結點為空,數據為-1代表二叉樹數據輸入結束,-1不作處理。二叉樹的構造按照層次順

105 Construct Binary Tree from Preorder and Inorder Traversal 從前序列構造

leet blog pub struct class null true ems inorder 給定一棵樹的前序遍歷與中序遍歷,依據此構造二叉樹。註意:你可以假設樹中沒有重復的元素。例如,給出前序遍歷 = [3,9,20,15,7]中序遍歷 = [9,3,15,20,7]

得到後

() level struct OS spa str sel src [] 二叉樹的前序遍歷為:{1,2,4,7,3,5,6,8},中序遍歷為:{4,7,2,1,5,3,8,6},求後序遍歷   # -*- coding:utf-8 -*- class Nod

leetcode 105. 從前序列構造

binary col build for treenode class order dfs leetcode 根據一棵樹的前序遍歷與中序遍歷構造二叉樹。 註意:你可以假設樹中沒有重復的元素。 例如,給出 前序遍歷 preorder = [3,9,20,15,7] 中序遍歷

線索實例(前創建,)--2018.5.15

ID 中序遍歷 char turn 先序 AD 線索 lib data 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 typedef enum 5 { 6 Link,