·理解關鍵:先序遍歷的意思是先遍歷左子樹,等到左子樹全部遍歷完之後才遍歷自己,然後是右子樹。
#include
using
namespace std;
struct binarytreenode
;/*********************************
* 視覺化樹結構
**********************************/
void
padding
(char ch,
int n)
void
print_node
(struct binarytreenode *root,
int level)
else
}void
print_tree
(struct binarytreenode* root)
/*********************************
* 隨機生成一棵樹
**********************************/
binarytreenode*
creatnode
(int deep,
int range, binarytreenode* parent)
return node;
}binarytreenode*
creatrandtree
(int deep,
int range)
binarytreenode* root =
newbinarytreenode()
; root-
>m_pparent =
null
; root-
>m_nvalue =
rand()
% range;
if(deep ==1)
else
return root;
}/*********************************
* 演算法
**********************************/
binarytreenode*
getnext
(binarytreenode* pnode)
binarytreenode* pnext =
null;if
(pnode-
>m_pright !=
null
) pnext = pright;
}else
if(pnode-
>m_pparent !=
null)
pnext = pparent;
// 要麼是目標節點,要麼是null
}return pnext;
}int
main()
cout <<
"inorder: "
; cout << pnode-
>m_nvalue <<
" ";
while
(pnode=
getnext
(pnode)
)system
("pause");
return0;
}
·應用場景:非遞迴方法中序遍歷樹。 8 二叉樹的下乙個節點
給定乙個二叉樹和其中的乙個結點,請找出中序遍歷順序的下乙個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指標。分三種情況考慮。1 若該節點存在右子樹,則下一節點為右子樹最左邊的節點。2 該節點不存在右子樹,若該節點為父節點的左節點,則該父節點為該節點的下一節點。3 若該節點為...
8 二叉樹的下乙個節點
public static treenode getnext treenode node treenode temp node.right treenode nextnode 如果乙個節點有右子樹 if temp null nextnode temp 如果乙個節點沒有右子樹,且是它父節點的左子節點 ...
8 二叉樹的下乙個節點
1 題目描述 給定乙個二叉樹和其中的乙個結點,請找出中序遍歷順序的下乙個結點並且返回。注意,樹中的結點不僅包含左右子結點,同時包含指向父結點的指標。public class treelinknode 2 思路 以該二叉樹為例,中序遍歷為 仔細觀察,可以把中序下一結點歸為幾種型別 有右子樹,下一結點是...