關鍵是舉例和畫圖的思想。
主要分三種型別。
1.有右子樹:返回 右子樹的最左節點。
2.無右子樹:2.有父節點:2.是左結點:返回 父節點。
3.無右子樹:3.有父節點:3.是右節點:找到第乙個是左結點的節點,返回 該節點的父節點。//這裡的while我出了個bug
4.無右子樹:4.無父節點:返回 空。
我的**。
/*
struct treelinknode
};*/
class solution
//無右子樹
else
pnext = current->next;} }
//無父結點
else
}return pnext;
}};
網友的python**
#1.有右子樹,返回 右子樹最左邊的結點
#2.無右子樹,返回 當前結點成為左子樹跟時的父節點
# -*- coding:utf-8 -*-
# class treelinknode:
# def __init__(self, x):
# self.val = x
# self.left = none
# self.right = none
# self.next = none
class solution:
def getnext(self, pnode):
# write code here
if pnode is none:
return none
#1.有右子樹,為右子樹最左邊的結點
if pnode.right is not none:
node=pnode.right
while node.left is not none:
node=node.left
return node
#2.無右子樹,為當前結點成為左子樹跟時的父節點
if pnode.next is not none:
cur_node=pnode
parent_node=pnode.next
while parent_node is not none and parent_node.left!=cur_node:
cur_node=parent_node
parent_node=cur_node.next
return parent_node
return none
第二種思路
如果無右子樹且父節點存在,只要找到為左結點的節點就好了,返回該節點的父節點。
class solution:
def getnext(self, pnode):
# write code here
if pnode is none:
return none
if pnode.right is not none:
pnode = pnode.right
while pnode.left is not none:
pnode = pnode.left
return pnode
while pnode.next is not none:
if pnode.next.left == pnode:
return pnode.next
pnode = pnode.next
return none
二叉樹結點, 排序
二叉樹結點,排序 1.二叉搜尋樹結點最小距離 給定乙個二叉搜尋樹的根結點 root,返回樹中任意兩節點的差的最小值 對這個序列相鄰相減,取最小值即可。實現時,可以優化掉這個序列。在遍歷時記錄上乙個訪問的節點值,和當前節點相減,記錄下最小值即可 定義樹節點 public class treenode ...
二叉樹刪除結點
二叉樹完成刪除結點的操作.規定 1 如果刪除的節點是葉子節點,則刪除該節點 2 如果刪除的節點是非葉子節點,則刪除該子樹 思路首先先處理 考慮如果樹是空樹root,如果只有乙個root結點,則等價將二叉樹置空 然後進行下面步驟 1.因為我們的二叉樹是單向的,所以我們是判斷當前結點的子結點是否需要刪除...
DS二叉樹 二叉樹之父子結點
題目描述 給定一顆二叉樹的邏輯結構如下圖,先序遍歷的結果,空樹用字元 0 表示,例如ab0c00d00 建立該二叉樹的二叉鏈式儲存結構。編寫程式輸出該樹的所有葉子結點和它們的父親結點 輸入 第一行輸入乙個整數t,表示有t個二叉樹 第二行起,按照題目表示的輸入方法,輸入每個二叉樹的先序遍歷,連續輸入t...